I have a collection with some documents like:
{ _id: 5, vals: [100, 1100, 1500] }, { _id: 10, vals: [1100, 1700] }
How can I query for documents that have, in vals
field:
I can use some comprehension magic like:
g = lambda codes: ( d for d in collection.find() if any(code in d["vals"] for code in codes) ) g([100, 1700]).next()
Or, for the AND:
g = lambda codes: ( d for d in collection.find() if all(code in d["vals"] for code in codes) ) g([100, 1100]).next()
This seems a little clunky though if there is some find magic that can be done with the driver.
The $in operator selects the documents where the value of a field equals any value in the specified array. To specify an $in expression, use the following prototype: { field: { $in: [<value1>, <value2>, ... < valueN> ] } } For comparison of different BSON type values, see the specified BSON comparison order.
MongoDB provides different types of logical query operators and $and operator is one of them. This operator is used to perform logical AND operation on the array of one or more expressions and select or retrieve only those documents that match all the given expression in the array.
yourmongocoll.find({"vals":1100}) yourmongocoll.find({"$or":[ {"vals":1700}, {"vals":100}]}) yourmongocoll.find({"$and":[ {"vals":100}, {"vals":1100}]})
i would recommend reading Mongodb Advanced queries
you will also find $in ...useful
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With