我想要查詢所有包含特定值的字段的對象。例如,我有兩個文件:沒有字段名稱的mongodb查詢
{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
,並想獲得具有某個域的值是「蘋果」的所有對象,但我不知道該字段的名稱。是否有可能在MongoDB中指定一個查詢來實現這一點? (中的對象的數字鍵是兒童的ID,並且在對象的值是長的GUID)
我想要查詢所有包含特定值的字段的對象。例如,我有兩個文件:沒有字段名稱的mongodb查詢
{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
,並想獲得具有某個域的值是「蘋果」的所有對象,但我不知道該字段的名稱。是否有可能在MongoDB中指定一個查詢來實現這一點? (中的對象的數字鍵是兒童的ID,並且在對象的值是長的GUID)
不幸的是,MongoDB的不支持查詢的所有字段與特定值的任何方法。有一個現有的Jira門票請求此增強功能:https://jira.mongodb.org/browse/SERVER-1248。隨意發表評論,投票或跟隨該票。
在此期間,通常的方式,這是處理是改變MongoDB的架構。對於你的榜樣,你會改變你現有的模式:
{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
,你可能會構建它是這樣的:
{ tags: [
{ cid: "123", value: "apple" },
{ cid: "217", value: "pear" },
{ cid: "179", value: "orange" },
]
}
{ tags: [
{ cid: "831", value: "pear" },
{ cid: "189", value: "grapes" },
]
}
一旦你做到了這一點,您可以執行follwing查詢找到所有所需文件:
db.docs.find({'tags.value': "apple" })
請注意,此架構允許您爲原始模式不包含的'tags.cid'和'tags.value'字段編制索引。
我希望這會有所幫助。
- 威廉
您可以對所有字段使用全文索引。
use dbname
db.collectionname.ensureIndex(
{ "$**": "text" },
{ name: "TextIndex" }
)
然後搜索使用:
DB db = mongoClient.getDB("dbname");
DBCollection coll = db.getCollection("collectionname");
BasicDBObject query = new BasicDBObject();
query.append("$text", new BasicDBObject("$search", searchstring));
DBCursor cursor = coll.find(query);