尝试在嵌套的VARIABLE键值中运行具有相等条件的mongo db find查询
pymongo解决方案的奖励积分
db.utestmongo.insert({'name':'test','doc':{'heading':{'title':'awesome'},'body':{'title':'content'}}})
# want: 'title'=='awesome' => {'name':'test','doc':{'heading':{'title':'awesome'},'body':{'title':'content'}}}
# ideally
db.utestmongo.find( { "doc.*.title": "awesome" } )
# tried
db.utestmongo.find( { doc: { $elemMatch: { title: 'awesome' } } } )
还尝试了下面的链接,很困惑,可能是因为它不是一个相等查询
https://jira.mongodb.org/browse/SERVER-2989
https://docs.mongodb.com/manual/tutorial/query-embedded-documents/
Nested mongo query
Mongo nested query with keys
答案 0 :(得分:1)
如果希望将其保留为查找查询,则需要使用where子句并为其提供功能,但是我不确定这种方法的效率如何。
另一种选择是将聚合与objectToArray一起使用 然后遍历所有键。 它应该看起来像这样:
db.utestmongo.aggregate([
{
$addFields: { array: { $objectToArray: "$doc" }}
},
{
$match: {'array.v.title': "awesome"}
}])
pymongo解决方案
import pymongo
db_cnxn = pymongo.MongoClient()
db = db_cnxn['db']
pipeline = [
{"$addFields":{"array": { "$objectToArray": "$doc" }}},
{"$match": {'array.v.title': "awesome"}}
]
list(db['utestmongo'].aggregate(pipeline))