Definición
$setEqualsCompara dos o más arreglos y devuelve
truesi tienen los mismos elementos distintos yfalseen caso contrario.$setEqualstiene la siguiente sintaxis:{ $setEquals: [ <expression1>, <expression2>, ... ] } Los argumentos pueden ser cualquier válido. expresión, siempre que cada una de ellas se resuelva en una matriz. Para más información sobre expresiones, consulte Expresiones.
Comportamiento
$setEquals realiza operaciones de conjunto en matrices, tratándolas como conjuntos. Si una matriz contiene entradas duplicadas, $setEquals las ignora. $setEquals ignora el orden de los elementos.
Si un conjunto contiene un elemento de arreglo anidado, $setEquals no desciende al arreglo anidado, sino que evalúa el arreglo en el nivel superior.
Ejemplo | Resultado | notas | ||||
|---|---|---|---|---|---|---|
|
| Las matrices no contienen los mismos elementos. | ||||
|
| Las matrices no contienen los mismos elementos. | ||||
|
| Ambas matrices contienen los mismos elementos únicos. Al tratarlas como conjuntos, la primera matriz es | ||||
|
| Los elementos de las matrices no son iguales. La primera matriz contiene las cadenas | ||||
|
| Los elementos de las matrices no son iguales. La primera matriz está vacía y la segunda tiene dos elementos de cadena. | ||||
|
| Las matrices no contienen los mismos elementos únicos. La primera matriz solo contiene |
Ejemplo
Considera una colección bakeryOrders con los siguientes documentos:
db.bakeryOrders.insertMany( [ { _id: 0, cakes: ["chocolate", "vanilla"], cupcakes: ["chocolate", "vanilla"] }, { _id: 1, cakes: ["chocolate", "vanilla"], cupcakes: ["vanilla", "chocolate"] }, { _id: 2, cakes: ["chocolate", "chocolate"], cupcakes: ["chocolate"] }, { _id: 3, cakes: ["vanilla"], cupcakes: ["chocolate"] }, { _id: 4, cakes: ["vanilla"], cupcakes: [] } ] )
La siguiente operación utiliza el operador para determinar si $setEquals la cakes matriz y la cupcakes matriz en cada orden contienen los mismos sabores:
db.bakeryOrders.aggregate( [ { $project: { _id: 0, cakes: 1, cupcakes: 1, sameFlavors: { $setEquals: [ "$cakes", "$cupcakes" ] } } } ] )
Nota
$project
La operación devuelve los siguientes resultados:
{ cakes: [ "chocolate", "vanilla" ], cupcakes: [ "chocolate", "vanilla" ], sameFlavors: true }, { cakes: [ "chocolate", "vanilla" ], cupcakes: [ "vanilla", "chocolate" ], sameFlavors: true }, { cakes: [ "chocolate", "chocolate" ], cupcakes: [ "chocolate" ], sameFlavors: true }, { cakes: [ "vanilla" ], cupcakes: [ "chocolate" ], sameFlavors: false }, { cakes: [ "vanilla" ], cupcakes: [], sameFlavors: false }