• Logical query operators
    • $and
    • $or
    • $not
    • $nor

Logical query operators

Logical query operators return data based on specified query expressions that are either true or false.
Operator| Description
---|---
$and| Joins all query expressions with a logical AND operator
$or| Joins all query expressions with a logical OR operator
$not| Returns all documents that do NOT match a query expression
$nor| Returns all documents that do not match any of the query expressions
For the examples in this section, insert the following documents into the catalog collection:
1. db.catalog.insertMany([
2. {
3. product: 'bottle',
4. price: 15,
5. stock: 1,
6. discount: true,
7. variation: [
8. {
9. size: ['small', 'medium', 'large']
10. },
11. {
12. color: ['black', 'silver']
13. }
14. ]
15. },
16. {
17. product: 'spoon',
18. price: 500,
19. stock: 0,
20. discount: true,
21. variation: [
22. {
23. size: ['small', 'medium', 'large']
24. },
25. {
26. color: ['silver', 'white']
27. }
28. ]
29. },
30. {
31. product: 'cup',
32. price: 100,
33. stock: 14,
34. discount: true,
35. variation: [
36. {
37. size: ['small', 'medium', 'large']
38. },
39. {
40. color: ['red', 'black', 'white']
41. }
42. ]
43. },
44. {
45. product: 'bowl',
46. price: 56,
47. stock: 5,
48. discount: false,
49. variation: [
50. {
51. size: ['small', 'medium', 'large']
52. },
53. {
54. color: ['pink', 'white', 'red']
55. }
56. ]
57. }
58. ])

$and

Syntax : { $and: [ { <condition1> }, { <condition2> } , ... , { <condition3> } ] }
To satisfy more than one query condition when selecting documents, use the $and operator.
Example: Select documents that satisfy both of these expressions in the catalog collection:
* price field is less than 100 AND
* stock field is not 0

  1. db.catalog.find({
    2.   $and: [
    3.     {
    4.       price: {
    5.         $lt: 100
    6.       }
    7.     },
    8.     {
    9.       stock: {
    10.         $ne: 0
    11.       }
    12.     }
    13.   ]
    14. })

The output:
1. [
2. {
3. _id: ObjectId("639ba4a0071b6bed396a8f13"),
4. product: 'bottle',
5. price: 15,
6. stock: 1,
7. discount: true,
8. variation: [
9. { size: ['small', 'medium', 'large'] },
10. { color: ['black', 'silver'] }
11. ]
12. },
13. {
14. _id: ObjectId("639ba4a0071b6bed396a8f16"),
15. product: 'bowl',
16. price: 56,
17. stock: 5,
18. discount: false,
19. variation: [
20. { size: ['small', 'medium', 'large'] },
21. { color: ['pink', 'white', 'red'] }
22. ]
23. }
24. ]

$or

Syntax : { $or: [ { <condition1> }, { <condition2> } , ... , { <conditionN> } ] }
To satisfy either one or more conditions in a query, use the $or operator to join the conditions.
Example: Select the documents that match these expressions:
* discount field is true and stock field is not 0 OR
* price field is less than or equal to 60

  1. db.catalog.find({
    2.   $or: [
    3.     {
    4.       $and: [
    5.         {
    6.           discount: true
    7.         },
    8.         {
    9.           stock: {
    10.             $ne: 0
    11.           }
    12.         }
    13.       ]
    14.     },
    15.     {
    16.       price: {
    17.         $lte: 60
    18.       }
    19.     }
    20.   ]
    21. })

The output:
1. [
2. {
3. _id: ObjectId("639ba4a0071b6bed396a8f13"),
4. product: 'bottle',
5. price: 15,
6. stock: 1,
7. discount: true,
8. variation: [
9. { size: ['small', 'medium', 'large'] },
10. { color: ['black', 'silver'] }
11. ]
12. },
13. {
14. _id: ObjectId("639ba4a0071b6bed396a8f15"),
15. product: 'cup',
16. price: 100,
17. stock: 14,
18. discount: true,
19. variation: [
20. { size: ['small', 'medium', 'large'] },
21. { color: ['red', 'black', 'white'] }
22. ]
23. },
24. {
25. _id: ObjectId("639ba4a0071b6bed396a8f16"),
26. product: 'bowl',
27. price: 56,
28. stock: 5,
29. discount: false,
30. variation: [
31. { size: ['small', 'medium', 'large'] },
32. { color: ['pink', 'white', 'red'] }
33. ]
34. }
35. ]

$not

Syntax : { <field>: { $not: { <condition> } } }
To select documents that fail to match a particular query condition, use the $not operator.
Example: The following operation selects documents that do not satisfy the specified expression, where the stock field is not less than 5.
1. db.catalog.find({
2. stock: {
3. $not: {
4. $lt: 5
5. }
6. }
7. })

The output:
1. [
2. {
3. _id: ObjectId("639ba4a0071b6bed396a8f15"),
4. product: 'cup',
5. price: 100,
6. stock: 14,
7. discount: true,
8. variation: [
9. { size: ['small', 'medium', 'large'] },
10. { color: ['red', 'black', 'white'] }
11. ]
12. },
13. {
14. _id: ObjectId("639ba4a0071b6bed396a8f16"),
15. product: 'bowl',
16. price: 56,
17. stock: 5,
18. discount: false,
19. variation: [
20. { size: ['small', 'medium', 'large'] },
21. { color: ['pink', 'white', 'red'] }
22. ]
23. }
24. ]

$nor

Syntax : { $nor: [ { <condition1> }, { <condition2> }, ... { <conditionN> } ] }
To select documents that fail to match any of the conditions in a specified query, use the $nor operator.
Example: Select the documents that fail to match any of these conditions:
* discount field is true and stock field is not 0
* price field is less than or equal to 60

  1. db.catalog.find({
    2.   $nor: [
    3.     {
    4.       $and: [
    5.         {
    6.           discount: true
    7.         },
    8.         {
    9.           stock: {
    10.             $ne: 0
    11.           }
    12.         }
    13.       ]
    14.     },
    15.     {
    16.       price: {
    17.         $lte: 60
    18.       }
    19.     }
    20.   ]
    21. })

The output:
1. [
2. {
3. _id: ObjectId("639ba4a0071b6bed396a8f14"),
4. product: 'spoon',
5. price: 500,
6. stock: 0,
7. discount: true,
8. variation: [
9. { size: ['small', 'medium', 'large'] },
10. { color: ['silver', 'white'] }
11. ]
12. }
13. ]