Overview of Filter Logical Combining Operators
You use filter logical combining operators, $and, $or, and $nor, to combine conditions to form more complex filters. Each accepts an array of conditions as its argument.
Filter logical combining operator $and matches a document if each condition in its array argument matches it. For example, this filter matches Example 2-1, because that document contains a field name whose value starts with "Ja", and it contains a field drinks whose value is "tea".
{"$and" : [ {"name" : {"$startsWith" : "Ja"}}, {"drinks" : "tea"} ]}
Often you can omit operator $and — it is implicit. For example, the following query is equivalent to the previous one:
{"name" : {"$startsWith" : "Ja"}, "drinks" : "tea"}
Filter logical combining operator $or matches a document if at least one of the conditions in its array argument matches it.
For example, the following filter matches Example 2-2 and Example 2-3, because those documents contain a field drinks whose value is "soda" or they contain a field zip under a field address, where the value of address.zip is less than 94000, or they contain both:
{"$or" : [ {"drinks" : "soda"}, {"address.zip" : {"$le" : 94000}} ]}
Filter logical combining operator $nor matches a document if no condition in its array argument matches it. (Operators $nor and $or are logical complements.)
The following query matches sample document 1, because in that document there is neither a field drinks whose value is "soda" nor a field zip under a field address, where the value of address.zip is less than 94000:
{"$nor" : [ {"drinks" : "soda"}, {"address.zip" : {"$le" : 94000}} ]}
Each element in the array argument of a logical combining operator is a condition.
For example, the following condition has a single logical combining clause, with operator $and. The array value of $and has two conditions: the first condition restricts the value of field age. The second condition has a single logical combining clause with $or, and it restricts either the value of field name or the value of field drinks.
{ "$and" : [ { "age" : {"$gte" : 60} },
{ "$or" : [ {"name" : "Jason"},
{"drinks" : {"$in" : ["tea", "soda"]}} ] } ] }
-
The condition with the comparison for field
agematches sample document 3. -
The condition with logical combining operator
$ormatches sample documents 1 and 3. -
The overall condition matches only sample document 3, because that is the only document that satisfies both the condition on
ageand the condition that uses$or.
The following condition has two conditions in the array argument of operator $or. The first of these has a single logical combining clause with $and, and it restricts the values of fields name and drinks. The second has a single logical combining clause with $nor, and it restricts the values of fields age and name.
{ "$or" : [ { "$and" : [ {"name" : "Jason"},
{"drinks" : {"$in" : ["tea", "soda"]}} ] },
{ "$nor" : [ {"age" : {"$lt" : 65}},
{"name" : "Jason"} ] } ] }
-
The condition with operator
$andmatches sample document 1. -
The condition with operator
$normatches sample document 3. -
The overall condition matches both sample documents 1 and 3, because each of these documents satisfies at least one condition in the
$orargument.
Related Topics