Definición
$anyElementTrueEvalúa un arreglo como un conjunto y devuelve
truesi alguno de los elementos estrueyfalseen caso contrario. Un arreglo vacío devuelvefalse.$anyElementTruetiene 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 expresiones, consulta Expresiones.
Comportamiento
Si un conjunto contiene un elemento de matriz anidada, $anyElementTrue no desciende a la matriz anidada, sino que evalúa la matriz en el nivel superior.
Además del valor booleano false, $anyElementTrue evalúa como false los siguientes valores: null, 0 y undefined. El $anyElementTrue evalúa todos los demás valores como true, incluidos los valores numéricos distintos de cero y las matrices.
Ejemplo | Resultado |
|---|---|
|
|
|
|
|
|
|
|
Ejemplo
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 array responses contiene algún valor que se 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: 1estrueporque el elemento dentro del arregloresponsesse evalúa comotrue.Los documentos con
_id: 2y_id: 4sontrueporque al menos un elemento dentro del arregloresponsesse evalúa comotrue.Los documentos con
_id: 6,_id: 7y_id: 8sontrueporque el arregloresponses, que es el arreglo que$anyElementTrueevaluó para la operación, contiene un arreglo anidado, que$anyElementTruesiempre evalúa comotrue.