环回mongodb连接器修改以支持slug id



对于Loopback中的一些REST公开对象,我想使用slugs(String)而不是ObjectID

文档对模型id的描述:

默认情况下,如果没有定义ID属性,并且模型选项的idInjection为false,LDL会自动向模型添加一个ID属性,如下所示:

id: {type: Number, generated: true, id: true}

我想我只需要指定String作为类型,generated: false来避免环回生成ObjectId

id: { type: String, generated: false, id: true },

-->根本不起作用

在代码mongodb.js中,我看到无论id的名称是什么,它都被一个ObjectID函数包裹着,这解释了String值的丢失。

附带说明:此外,generated属性从未在mongodb连接器代码中使用过,它的用途是什么

到目前为止我的解决方案

为我的模式定义添加一个自定义属性(objectId,因为我不确定生成是为了什么),它变成:

id: {
type: String, 
objectId: false, 
id: true
},

然后,我在MongoDB.prototype.create@mongodb.js:155:中使用此属性如下

var isObjectId = self.getDataSource(model)
.getModelDefinition(model)
.properties[idName]
.objectId;
if (idValue === null) {
delete data[idName]; // Allow MongoDB to generate the id
} else {
var oid = isObjectId ? ObjectID(idValue) : idValue; // Is it an Object ID?
data._id = oid; // Set it to _id
delete data[idName];
}

我以同样的方式更新了save()方法,现在我可以使用slug插入/修改对象,也可以从REST接口访问它们。

问题

我不确定这是对的,它会打碎什么吗

此外,我真的不喜欢修改依赖项的想法,所以我更喜欢使用官方方法,或者如果StrongLoop的人认为你可以利用它,那么我会写一个拉请求。

您应该能够使用以下定义:

  1. 在客户端上设置字符串id

    id: { type: String, generated: false, id: true }
    

  1. 使用ObjectID作为字符串

    id: { type: String, generated: true, id: true }
    

LoopBack mongodb连接器尝试接受id类型。只有当字符串格式与ObjectID匹配时,它才会转换为ObjectID。

最近修复了一个错误,但尚未发布:

https://github.com/strongloop/loopback-connector-mongodb/pull/15

请在上告诉我们https://groups.google.com/forum/#!论坛/loopbackjs,如果它不适合你的话。

相关内容

  • 没有找到相关文章

最新更新