loopback和mongo中的相同'find'查询在不同的服务器中具有不同的行为

时间:2017-02-02 21:16:52

标签: node.js mongodb loopback

我正在尝试在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)。

有没有想法解决这个问题?

提前致谢!

佩德罗。

2 个答案:

答案 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"
}