我正在尝试在loopback模型JS文件中进行查询。这很简单,如下:
//isAdmin function: gets a boolean if a given userProfileId is an admin or not.
Userprofile.isAdmin = function(userProfileId, cb) {
let role = app.models.Role;
let rolemapping = app.models.RoleMapping;
let filter = {
"where": {
"name": "admin"
},
"fields": ["id"]
};
role.findOne(filter, function(err, instance) {
let filter2 = {
"where": {
"roleId": instance.id
,
"principalId": userProfileId,
},
"fields": ["id"]
};
rolemapping.find(filter2, function(err, instance) {
if (instance != "") {
cb(null, true);
} else {
cb(null, false);
}
});
});
};
这在我们的开发服务器中完美运行。该服务器中console.log
的{{1}}返回:
filter2
{ where:
{ roleId: 5890ef8bbef9b73e568c6933,
principalId: '5890ef8bbef9b73e568c6932' },
fields: [ 'id' ]
}
}
的{{1}}看起来像:
console.log
问题出在我们的生产服务器上。我已经完成了部署过程,结果略有不同,但根本不起作用:(。
instance.id
的{{1}}返回:
ObjectID { _bsontype: 'ObjectID', id: 'Xï¾ù·>Vi3 }
并且,console.log
返回:
filter2
即使数据库中有满足查询的文档,我们的生产服务器中的此查询也不会返回任何文档。
我比较了所有的npm软件包,并且所有版本都完全相同。还有服务器(我们使用的是Debian 8)和mongo(v3.2.10)。
有没有想法解决这个问题?
提前致谢!
佩德罗。
答案 0 :(得分:1)
使用相关模型的ID查询时遇到了类似的问题。通过选择喜欢而不是等同来解决问题,如下所示:
{where:
{and:[{roleId: {like:'.*'+roleIdVar+'*.', options:'i'}},
{principalId: {like:'.*'+principalIdVar+'*.', options:'i'}}]
}
},
{fields: [ 'id' ] }
请注意,字段投影应该是where过滤器的单独对象。
答案 1 :(得分:0)
您是否在" userProfile" .json文件中检查了userProfile id类型?这似乎是一个ids类型的问题。你可以解决它在你的model.json文件中添加带有类型字符串的id的属性,如下所示:
"properties": {
"userProfileId": {
"type": "string"
}