我想在 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接口访问它们。
我不确定这是对的,它会破坏什么吗?
另外,我真的不喜欢修改依赖关系的想法,所以我更喜欢使用官方方法,或者如果你们在 StrongLoop 认为你可以使用此
答案 0 :(得分:3)
您应该能够使用以下定义:
在客户端设置字符串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/#!forum/loopbackjs告诉我们。