我想要查询所有包含特定值的字段的对象。例如,我有两个文件:没有字段名称的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);