2010-12-13 23 views
1

ドキュメントがネストされたドキュメントを含むmongodbドキュメントを検索するにはどうすればよいですか?たとえば、プライベートメッセージのコレクションがあります。各プライベートメッセージには、2つのネストされたドキュメントがあります.1つは送信ユーザーを表し、もう1つは受信使用を表します。どちらのネストされた文書は、フォームを持っている -MongoDBネストされたドキュメントの検索

ユーザID:34343、 名:ジョーBloggs

私は、ユーザーによって送信されたすべてのメールメッセージを検索できるようにしたいと思います(例えば、送信者のユーザーネストされた文書を検索してください)。

私はjavaドライバを使用しています。ネストされたドキュメントを表すDBObjectを作成する必要がありますか?

おかげ

答えて

8

私はuがこのような文書構造持って理解したよう:あなたはユーザーIDをユーザーに送信する= 34345あなただけの次の操作を行う必要がある見つける必要があるのであれば

{ 
    "someProperty" : 1, 
    "sendingUser" : { 
       userID : 34343, 
       name : "Joe Bloggs" 
      }, 
    "recivingUser" : { 
       userID : 34345, 
       name : "Joe Bloggs" 
      } 
} 

を(私はちょうどそれはそうだと思い、実際に私はMongoのためのC#のドライバ)で働いていますので:

DBCollection coll = db.getCollection("privateMessages") 

    query = new BasicDBObject(); 

    query.put("sendingUser.userID", new BasicDBObject("$eq", 34345)); 

    cur = coll.find(query); // all documents with sendingUser.userID = 34345 will be //returned by cursor 

はまたjava driver

のためのチュートリアルを確認してください
+0

これは古い答えですが、実際には無効な演算子 '$ eq'が得られます:-( – Betlista

+2

この' query.put( "sendingUser.userID"、34345); '。 –

+0

はい、私はそれを発見しました後でありがとう、私の問題は、いくつかのデータベースと 'query.put(" sendingUser.userID "、34345);' 'ヌル'を返し、私はそれが動作していないと思ったが、レコードがデータベースではなく、私のミスそれはうまく動作します。 – Betlista

0

MongoDB Java Driver v3.2.2の場合。

FindIterable<Document> iterable = collection.find(Document.parse("{\"sendingUser.userID\": \"34343\"}")); 
FindIterable<Document> iterable = collection.find(Document.parse("{\"sendingUser.name\": \"Joe Bloggs\"}")); 

あなたはJSON形式のクエリ文字列内$eqを置くことができます:あなたはこのような何かを行うことができます。 { <field>: { $eq: <value> } }のように。

関連する問題