对于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的人认为你可以利用它,那么我会写一个拉请求。
您应该能够使用以下定义:
-
在客户端上设置字符串id
id: { type: String, generated: false, id: true }
或
-
使用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,如果它不适合你的话。