$anyElementTrue (aggregation)

Definition

  • $anyElementTrue

New in version 2.6.

Evaluates an array as a set and returns true if any of theelements are true and false otherwise. An empty arrayreturns false.

$anyElementTrue has the following syntax:

  1. { $anyElementTrue: [ <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, $anyElementTrue does not descendinto the nested array but evaluates the array at top-level.

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

Example Result
{ $anyElementTrue: [ [ true, false ] ] } true
{ $anyElementTrue: [ [ [ false ] ] ] } true
{ $anyElementTrue: [ [ null, false, 0 ] ] } false
{ $anyElementTrue: [ [ ] ] } 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 $anyElementTrue operatorto determine if the responses array contains any value thatevaluates to true:

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

The operation returns the following results:

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