1

$elemMatchデュアルネスト配列で使用しようとすると問題が発生します。

私がこのaドキュメントを持っているとしましょう:

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

idそして、が1countで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}}}})

ただし、すべてNoneを返します。

では$elemMatch、ネストされた配列の一致をサポートしますか?もしそうなら、どのようにクエリを調整しますか?

4

1 に答える 1

2

配列内に配列があるという事実を考えると、次のようなことを試すことができると思います

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