Docs Menu
Docs Home
/ /

$setEquals (agregación)

$setEquals

Compara dos o más arreglos y devuelve true si tienen los mismos elementos distintos y false en caso contrario.

$setEquals tiene 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.

$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
{ $setEquals: [
[ "a", "c" ],
[ "a", "b" ]
] }

false

Las matrices no contienen los mismos elementos.

{ $setEquals: [
[ "a", "c" ],
[ "a", "b", "c" ]
] }

false

Las matrices no contienen los mismos elementos.

{ $setEquals: [
[ "a", "b", "a" ],
[ "b", "a" ]
] }

true

Ambas matrices contienen los mismos elementos únicos. Al tratarlas como conjuntos, la primera matriz es [ "a", "b" ] porque se ignoran los duplicados.

{ $setEquals: [
[ "a", "b" ],
[ [ "a", "b" ] ]
] }

false

Los elementos de las matrices no son iguales. La primera matriz contiene las cadenas "a" y "b", mientras que la segunda contiene la matriz [ "a", "b" ].

{ $setEquals: [
[ ],
[ "a", "b" ]
] }

false

Los elementos de las matrices no son iguales. La primera matriz está vacía y la segunda tiene dos elementos de cadena.

{ $setEquals: [
[ "a", "a" ],
[ "a", "b" ]
] }

false

Las matrices no contienen los mismos elementos únicos. La primera matriz solo contiene "a", mientras que la segunda contiene "a" y "b".

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 etapa especifica qué campos se incluyen en $project $project los documentos de salida. En este ejemplo, la etapa:

  • Excluye el campo _id de la salida.

  • Incluye los campos cakes y cupcakes en la salida.

  • Genera el resultado del operador $setEquals en un nuevo campo llamado sameFlavors.

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
}

Volver

$setDifference

En esta página