1

我在尝试$elemMatch在双嵌套数组中使用时遇到问题:

假设我有这个a文件:

a = {'cart': [[{'id': 1, 'count': 1}, {'id': 2, 'count': 3}], [{'id': 1, 'count': 5}]]}

我想在id1 且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支持嵌套数组匹配?如果是这样,我应该如何调整我的查询?

4

1 回答 1

2

鉴于您在数组中有一个数组,我认为您可以尝试类似

db.cart.find_one({'cart': {'$elemMatch': { '$elemMatch' : {'id': 1, 'count': {'$gt': 2}}}}})
于 2012-11-14T11:47:45.100 回答