2017-02-02 10 views
1

ループバックモデルのJSファイルでクエリを作成しようとしています。それは次のように非常に簡単です:ループバックで同じ 'find'クエリが実行され、mongoは異なるサーバーで異なる動作をします

//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); 
       } 
      }); 
     }); 
    }; 

私たちの開発サーバーでこれは完全に動作します。問題は、私たちの本番サーバである

ObjectID { _bsontype: 'ObjectID', id: 'Xï¾ù·>Vi3 } 

:そのサーバーが返すにおけるfilter2console.log、:ようinstance.id

{ where: 
    { roleId: 5890ef8bbef9b73e568c6933, 
     principalId: '5890ef8bbef9b73e568c6932' }, 
     fields: [ 'id' ] 
    } 
} 

console.logが見えます。私は、展開プロセスを行った結果はわずかに異なっているが、それがすべてでは動作しません:(

console.logfilter2のリターン:。

{ where: 
    { roleId: 58921dff16d9a37009e21104, 
      principalId: '5890ef8bbef9b73e568c6932' }, 
      fields: [ 'id' ] } 
} 

そして、console.log(instance.id)リターン:

ObjectID { _bsontype: 'ObjectID', id: Buffer [ 88, 146, 29, 255, 22, 217, 163, 112, 9, 226, 17, 4 ] } 

DBにクエリを満たすドキュメントがあっても、本番サーバーのこのクエリはドキュメントを返しません。

私はすべてのnpmパッケージを比較しましたが、まったく同じバージョンです。サーバ(Debian 8を使用しています)とmongo(v3.2.10)も同様です。

これを解決するためのアイデアはありますか?

ありがとうございます!

ペドロ。

答えて

1

関連するモデルのIDを照会するとき、私は同様の問題を経験しています。代わりに以下のような等価の等を選ぶことにより、この問題を解決:

{where: 
    {and:[{roleId: {like:'.*'+roleIdVar+'*.', options:'i'}}, 
     {principalId: {like:'.*'+principalIdVar+'*.', options:'i'}}] 
    } 
}, 
{fields: [ 'id' ] } 

もそのフィールド突起がどこフィルタから別のオブジェクトでなければならないのでご注意ください。

0

"userProfile" .jsonファイルのuserProfile idタイプを確認しましたか?それはIDの型の問題のようです。あなたは、あなたのmodel.jsonファイルで、文字列型とプロパティでこのような何かをIDを追加し、それを解決することができます:

"properties": { 
"userProfileId": { 
    "type": "string" 
} 
+0

はい、それが問題です!どうもありがとう! – pleivac

関連する問題