我想在Loopback中使用slugs ( String
) 而不是ObjectID
我的一些 REST 公开对象
默认情况下,如果没有定义 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认为可以使用它,可以写一个拉取请求。