Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$anyElementTrue (operador de expresión)

$anyElementTrue

Evalúa un arreglo como un conjunto y devuelve true si alguno de los elementos es true y false en caso contrario. Un arreglo vacío devuelve false.

$anyElementTrue tiene la siguiente sintaxis:

{ $anyElementTrue: [ <expression> ] }

<expression> misma debe resolverse en un arreglo, haciendo que sea distinto del arreglo exterior que supone la lista de argumentos. Para obtener más información sobre las expresiones, consultar expresión.

Si un conjunto contiene un elemento de arreglo anidado, $anyElementTrue no desciende al arreglo anidado, sino que evalúa el arreglo en el nivel superior.

Además del valor booleano false, $anyElementTrue se evalúa como false lo siguiente: null, 0 y valores undefined. La $anyElementTrue evalúa todos los demás valores como true, incluyendo valores numéricos distintos de cero y arreglos.

Ejemplo
Resultado

{ $anyElementTrue: [ [ true, false ] ] }

true

{ $anyElementTrue: [ [ [ false ] ] ] }

true

{ $anyElementTrue: [ [ null, false, 0 ] ] }

false

{ $anyElementTrue: [ [ ] ] }

false

Crea una colección de ejemplo llamada survey con los siguientes documentos:

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

La siguiente operación utiliza el operador $anyElementTrue para determinar si el arreglo responses contiene algún valor que evalúe como true:

db.survey.aggregate(
[
{ $project: { responses: 1, isAnyTrue: { $anyElementTrue: [ "$responses" ] }, _id: 1 } }
]
)
[
{ _id: 1, responses: [ true ], isAnyTrue: true },
{ _id: 2, responses: [ true, false ], isAnyTrue: true },
{ _id: 3, responses: [], isAnyTrue: false },
{ _id: 4, responses: [ 1, true, 'seven' ], isAnyTrue: true },
{ _id: 5, responses: [ 0 ], isAnyTrue: false },
{ _id: 6, responses: [ [] ], isAnyTrue: true },
{ _id: 7, responses: [ [ 0 ] ], isAnyTrue: true },
{ _id: 8, responses: [ [ false ] ], isAnyTrue: true },
{ _id: 9, responses: [ null ], isAnyTrue: false },
{ _id: 10, responses: [ null ], isAnyTrue: false }
]

En los resultados:

  • El documento con _id: 1 es true porque el elemento dentro del arreglo responses se evalúa como true.

  • Los documentos con _id: 2 y _id: 4 son true porque al menos un elemento dentro del arreglo responses se evalúa como true.

  • Los documentos con _id: 6, _id: 7 y _id: 8 son true porque el arreglo responses, que es el arreglo que $anyElementTrue evaluó para la operación, contiene un arreglo anidado, que $anyElementTrue siempre evalúa como true.

Volver

$and

En esta página