【发布时间】:2014-03-18 23:58:43
【问题描述】:
我想对 Loopback
中的一些 REST 公开对象使用 slugs (String) 而不是 ObjectID
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,因为我不确定 generated 的用途),它变成:
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 认为可以使用这个。
【问题讨论】:
标签: mongodb model slug strongloop loopbackjs