尝试在双嵌套数组中使用$elemMatch
时遇到问题:
假设我有这个a
文档:
a = {'cart': [[{'id': 1, 'count': 1}, {'id': 2, 'count': 3}], [{'id': 1, 'count': 5}]]}
我希望在id
为1且count
大于2时选择一个文档:
db.cart.find_one({'cart.0.id': 1, 'cart.0.count': {'$gt': 2}})
但是此查询会选择a
输出。
然后我尝试了这些查询:
db.cart.find_one({'cart': {'$elemMatch': {'id': 1, 'count': {'$gt': 2}}}})
db.cart.find_one({'cart': {'$elemMatch': {'id': 2, 'count': {'$gt': 2}}}})
db.cart.find_one({'cart.0': {'$elemMatch': {'id': 1, 'count': {'$gt': 2}}}})
db.cart.find_one({'cart.0': {'$elemMatch': {'id': 2, 'count': {'$gt': 2}}}})
但都返回无。
那么$elemMatch
是否支持嵌套数组匹配?如果是这样,我该如何调整我的查询?
答案 0 :(得分:2)
鉴于你在一个数组中有一个数组,我想你可以试试像
这样的东西db.cart.find_one({'cart': {'$elemMatch': { '$elemMatch' : {'id': 1, 'count': {'$gt': 2}}}}})