$allElementsTrue (aggregation)

Definition

  • $allElementsTrue

New in version 2.6.

Evaluates an array as a set and returns true if no element inthe array is false. Otherwise, returns false. An empty arrayreturns true.

$allElementsTrue has the following syntax:

  1. { $allElementsTrue: [ <expression> ] }

The <expression> itself must resolve to an array, separate fromthe outer array that denotes the argument list. For more informationon expressions, see Expressions.

Behavior

If a set contains a nested array element, $allElementsTrue does not descendinto the nested array but evaluates the array at top-level.

In addition to the false boolean value, $allElementsTrue evaluatesas false the following: null, 0, and undefinedvalues. The $allElementsTrue evaluates all other values as true,including non-zero numeric values and arrays.

Example Result
{ $allElementsTrue: [ [ true, 1, "someString" ] ] } true
{ $allElementsTrue: [ [ [ false ] ] ] } true
{ $allElementsTrue: [ [ ] ] } true
{ $allElementsTrue: [ [ null, false, 0 ] ] } false

Example

Create an example collection named survey with the followingdocuments:

  1. db.survey.insertMany([
  2. { "_id" : 1, "responses" : [ true ] },
  3. { "_id" : 2, "responses" : [ true, false ] },
  4. { "_id" : 3, "responses" : [ ] },
  5. { "_id" : 4, "responses" : [ 1, true, "seven" ] },
  6. { "_id" : 5, "responses" : [ 0 ] },
  7. { "_id" : 6, "responses" : [ [ ] ] },
  8. { "_id" : 7, "responses" : [ [ 0 ] ] },
  9. { "_id" : 8, "responses" : [ [ false ] ] },
  10. { "_id" : 9, "responses" : [ null ] },
  11. { "_id" : 10, "responses" : [ undefined ] }
  12. ])

The following operation uses the $allElementsTrueoperator to determine if the responses array only contains valuesthat evaluate to true:

  1. db.survey.aggregate(
  2. [
  3. { $project: { responses: 1, isAllTrue: { $allElementsTrue: [ "$responses" ] }, _id: 0 } }
  4. ]
  5. )

The operation returns the following results:

  1. { "responses" : [ true ], "isAllTrue" : true }
  2. { "responses" : [ true, false ], "isAllTrue" : false }
  3. { "responses" : [ ], "isAllTrue" : true }
  4. { "responses" : [ 1, true, "seven" ], "isAllTrue" : true }
  5. { "responses" : [ 0 ], "isAllTrue" : false }
  6. { "responses" : [ [ ] ], "isAllTrue" : true }
  7. { "responses" : [ [ 0 ] ], "isAllTrue" : true }
  8. { "responses" : [ [ false ] ], "isAllTrue" : true }
  9. { "responses" : [ null ], "isAllTrue" : false }
  10. { "responses" : [ undefined ], "isAllTrue" : false }