我在loopback.js中将字符串转换为ObjectId时遇到了一些麻烦。 有时它作为字符串插入,因此关系和过滤器不起作用(GUID字段)。数据库中的示例:
/* 1 */
{
"_id" : ObjectId("59a3d023fe1dfe3cd6fae101"),
"GUID" : "59a3d023f82383384ea87e40",
"username" : "John Doe"
}
/* 2 */
{
"_id" : ObjectId("59a3d0f3fe1dfe3cd6fae104"),
"GUID" : ObjectId("59a3d023f82383384ea87e40"),
"username" : "John Doe"
}
GUID字段是来自其他loopback / Mongo应用程序的现有ID。你可以看到它在2个文档中是相同的GUID,我运行了两次相同的代码,第二次运行.. 我使用的代码:
data.user.GUID = new ObjectID(data.user.GUID);
data.project.GUID = new ObjectID(data.project.GUID);
return Promise.all([
app.models.user.upsertWithWhere({
GUID: data.user.GUID
}, {
GUID: data.user.GUID,
username: data.user.username
}),
app.models.project.upsertWithWhere({
GUID: data.project.GUID
}, {
GUID: data.project.GUID,
name: data.project.name
})
]).then((result) => {
// console.log("USER", result[0]);
// console.log("PROJECT", result[1]);
return result;
});
如果你能帮助我,我真的不明白发生了什么! < 3
答案 0 :(得分:0)
免责声明:我是LoopBack维护者之一。
我担心LoopBack在所有情况下仍然无法正确处理ObjectID
。如果它能解决您遇到的问题,可以尝试以下几点:
1)在模型配置中启用strictObjectIDCoercion
标志(docs)。
// common/models/project.json
{
"name": "Project",
// ...
"options": {
"validateUpsert": true,
"strictObjectIDCoercion": true
}
}
2)将loopback-datatype-objectid添加到您的应用中,并将您的GUID
属性定义为"type": "objectid"
。有关详细信息,请参阅this comment。