1

ドキュメントのcontacts配列に特定の_idを含むドキュメントを検索しています。構造は次のとおりです。

{
"_id": ObjectId("505c2daea9d397f2260001cd"),
 "contacts": [
     {
       "userGroupId": ObjectId("50422b53743d6c7c0e000000"),
       "userId": ObjectId("5061f8c66096eee07d000008") 
    },
     {
       "userGroupId": ObjectId("505bf9476096ee990200000e"),
       "userId": ObjectId("505c2daea9d397f2260001ce") 
    },
      {
       "userGroupId": ObjectId("50422b75743d6c700e000004"),
       "userId": ObjectId("506cff736096ee1e26000384") 
    },
     {
       "userGroupId": ObjectId("50422b66743d6c6b0e000000"),
       "userId": ObjectId("505c2daea9d397f2260001cf") 
    },
     {
       "userGroupId": ObjectId("5050e86aa9d3977b67000000"),
       "userId": ObjectId("506494ef6096ee021f000064") 
    },
     {
       "userGroupId": ObjectId("50422b53743d6c7c0e000000"),
       "userId": ObjectId("504d72246096ee2348000008") 
    },
     {
       "userId": ObjectId("50735e8e6096ee7c510002b9"),
       "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
  ]
}

これが2番目のドキュメントです:

{
 "_id": ObjectId("505c2da0a9d397f2260000b7"),
"contacts": [
      {
       "userGroupId": ObjectId("50422b66743d6c6b0e000000"),
       "userId": ObjectId("505c2da0a9d397f2260000b8") 
    },
     {
       "userId": ObjectId("5061f8c66096eee07d000008"),
       "userGroupId": ObjectId("50422b53743d6c7c0e000000") 
    },
     {
       "userId": ObjectId("50735e8e6096ee7c510002b9"),
       "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
  ]
}

両方のドキュメントにObjectId( "50735e8e6096ee7c510002b9")のuserIdが含まれていることがわかります。私はこのコマンドを実行します:

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } }
});

どちらが(私が思うに)両方のドキュメントを返す必要があります。ただし、2番目のドキュメントのみが返されます。最初ではありません。私も試しました:

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") });

これは、$elemMatchクエリと同じことを行います。

本当に初歩的なものが足りないのかもしれませんが、アドバイスをいただければ幸いです。

4

1 に答える 1

0

これは、Mongoではなく、アプリケーション層の問題でした。レコードの1つは数値でキー設定されていましたが、もう1つはそうではありませんでした。私は、すべてのアレイにキーを設定しているように見えるRockMongoで作業していました。

あなたの助けをありがとうJohnnyHK

于 2012-10-18T23:53:41.993 に答える