如何通過mongodb文檔搜索文檔嵌套文檔。例如,我收集了一些私人消息。每條私人消息都有兩個嵌套文件 - 一個代表發送用戶,另一個代表接收用途。兩個嵌套文檔的形式爲 -MongoDB嵌套文檔搜索
用戶ID:34343, 名稱:李四
我想是能夠搜索用戶發送的所有郵件(例如搜索發件人用戶嵌套文件)。
我正在使用java驅動程序。我是否需要創建一個代表嵌套文檔的DBObject?
感謝
如何通過mongodb文檔搜索文檔嵌套文檔。例如,我收集了一些私人消息。每條私人消息都有兩個嵌套文件 - 一個代表發送用戶,另一個代表接收用途。兩個嵌套文檔的形式爲 -MongoDB嵌套文檔搜索
用戶ID:34343, 名稱:李四
我想是能夠搜索用戶發送的所有郵件(例如搜索發件人用戶嵌套文件)。
我正在使用java驅動程序。我是否需要創建一個代表嵌套文檔的DBObject?
感謝
按照我的理解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
適用於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> } }
。
我知道這是舊的答案,但實際上我得到無效的運算符'$ eq' :-( – Betlista 2012-11-11 17:44:13
試試這個'query.put(「sendingUser.userID」,34345);'。 – 2012-11-12 03:36:14
是的,我發現後來感謝,我的問題是,我使用了幾個數據庫和'query.put(「sendingUser.userID」,34345);'返回'null',我認爲它不工作,但記錄不在數據庫中,我的錯誤。它工作正常。 – Betlista 2012-11-12 10:09:54