我想在Loopback中使用slugs( String
)而不是 ObjectID
来表示我在REST中暴露的一些对象
What the docs says about model ids:
默认情况下,如果未定义ID属性且模型选项的idInjection为false,则LDL会自动向模型添加id属性,如下所示:
id: {type: Number, generated: true, id: true}
我认为我只需要指定 String
作为类型,并且 generated: false
以避免该环回生成 ObjectId
.
id: { type: String, generated: false, id: true },
-
这根本不起作用
In the code, 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接口访问它们 .
问题
I'm not sure this is right, will it break something?
另外,我真的不喜欢修改依赖项的想法,所以我更喜欢使用官方方法,或者如果StrongLoop的人认为你可以使用它,那么就写一个pull请求 .
1 回答
您应该能够使用以下定义:
要么
LoopBack mongodb连接器尝试遵守id类型 . 如果字符串格式与ObjectID匹配,它只会转换为ObjectID .
最近修复了一个错误,但尚未发布:
https://github.com/strongloop/loopback-connector-mongodb/pull/15
如果不适合您,请在https://groups.google.com/forum/#!forum/loopbackjs告诉我们 .