2010-12-13 7 views
1

문서가 중첩 된 문서가있는 mongodb 문서를 검색하려면 어떻게해야합니까? 예를 들어 개인 메시지가 있습니다. 각 개인 메시지에는 두 개의 중첩 된 문서가 있습니다. 하나는 송신 사용자를 나타내고 다른 하나는 수신 사용을 나타냅니다. 두 중첩 된 문서의 형식은 -MongoDB 중첩 된 문서 검색

사용자 ID : 34343, 이름 : 조 Bloggs에

나는 사용자가 보낸 모든 메일 메시지를 검색 할 수 있도록하고 싶습니다 (예를 들어, 송신자의 사용자 중첩 된 문서를 검색).

자바 드라이버를 사용하고 있습니다. 중첩 된 문서를 나타내는 DBObject를 만들어야합니까?

감사

답변

8

내가 u는이 같은 문서 구조가 알고있는 것처럼 :

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

을 그래서 당신은 = 당신은 그냥 다음을 수행해야합니다 34345 (난 그냥 그렇게 생각하는 사용자 ID로 사용자를 보내는 찾을 필요로하는 경우, 실제로 내가 몽고에 대한 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

,745에 대한 튜토리얼을 확인
+0

이 답변은 오래된 질문입니다. 실제로는 유효하지 않은 연산자'$ eq'가 발생했습니다 :-( – Betlista

+2

이 쿼리를 사용하십시오. query.put ("sendingUser.userID", 34345);'. –

+0

예, 발견했습니다. 나중에 고마워, 내 문제는 내가 여러 데이터베이스와'query.put ("sendingUser.userID", 34345);를 사용하고'null'을 반환하고 나는 그것이 작동하지 않는다고 생각했지만 기록은 데이터베이스에 있지 않았고, 나의 실수였다. 그것은 잘 작동합니다. – 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> } }처럼.

관련 문제