2010-12-13 295 views
1

如何通過mongodb文檔搜索文檔嵌套文檔。例如,我收集了一些私人消息。每條私人消息都有兩個嵌套文件 - 一個代表發送用戶,另一個代表接收用途。兩個嵌套文檔的形式爲 -MongoDB嵌套文檔搜索

用戶ID:34343, 名稱:李四

我想是能夠搜索用戶發送的所有郵件(例如搜索發件人用戶嵌套文件)。

我正在使用java驅動程序。我是否需要創建一個代表嵌套文檔的DBObject?

感謝

回答

8

按照我的理解u有文檔的結構是這樣的:

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

所以如果你需要找到用戶ID發送用戶= 34345,你只需要做到以下(我只是覺得是這樣的,因爲其實我與蒙戈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 2012-11-11 17:44:13

+2

試試這個'query.put(「sendingUser.userID」,34345);'。 – 2012-11-12 03:36:14

+0

是的,我發現後來感謝,我的問題是,我使用了幾個數據庫和'query.put(「sendingUser.userID」,34345);'返回'null',我認爲它不工作,但記錄不在數據庫中,我的錯誤。它工作正常。 – Betlista 2012-11-12 10:09:54

0

適用於MongoDB Java驅動程序v3.2.2。你可以做這樣的事情:

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

你可以把$eq的JSON風格的查詢字符串內。像{ <field>: { $eq: <value> } }