Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$setDifference (operador de expresión)

$setDifference

Toma dos conjuntos y devuelve un arreglo que contiene los elementos que solo existen en el primer conjunto; es decir, realiza un complemento relativo del segundo conjunto respecto al primero.

$setDifference tiene la siguiente sintaxis:

{ $setDifference: [ <expression1>, <expression2> ] }

Los argumentos pueden ser cualquier expresión válida, siempre que cada uno se resuelva en un arreglo. Para obtener más información sobre las expresiones, consulta Expresiones.

$setDifference realiza operaciones de conjuntos en arreglos, tratándolos como conjuntos. Si un arreglo contiene entradas duplicadas, ignora$setDifference $setDifference las entradas duplicadas. ignora el orden de los elementos.

$setDifference filtra los duplicados en su resultado para producir un arreglo que contenga solo entradas únicas. El orden de los elementos en el arreglo de salida no está especificado.

Si un conjunto contiene un elemento de matriz anidada, $setDifference no desciende a la matriz anidada, sino que evalúa la matriz en el nivel superior.

Ejemplo
Resultado
notas
{ $setDifference: [
[ "a", "c" ],
[ "a", "b" ]
] }
[ "c" ]

"a" está presente en ambos arreglos, por lo que se elimina del resultado. "c" sólo está presente en el primer arreglo.

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

Tanto "a" como "c" están presentes en ambos arreglos, por lo que se eliminan del resultado. No quedan más elementos en el primer arreglo.

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

Tanto "a" como "b" están presentes en ambos arreglos, por lo que se eliminan del resultado. Los duplicados también se eliminan. No quedan más elementos en el primer arreglo.

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

Las cadenas "a" y "b" del primer arreglo no se encuentran en el segundo, que contiene un arreglo anidado.

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

El primer arreglo está vacío, por lo que no hay elementos de los cuales restar, independientemente de lo que haya en el segundo arreglo.

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

"a" está presente en el segundo arreglo, por lo que se elimina del resultado. Los duplicados también se eliminan. No quedan más elementos en el primer arreglo.

Considere una colección flowers con los siguientes documentos:

db.flowers.insertMany( [
{ "_id" : 1, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ] },
{ "_id" : 2, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ] },
{ "_id" : 3, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ] },
{ "_id" : 4, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ] },
{ "_id" : 5, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ] },
{ "_id" : 6, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ] },
{ "_id" : 7, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ] },
{ "_id" : 8, "flowerFieldA" : [ ], "flowerFieldB" : [ ] },
{ "_id" : 9, "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ] }
] )

La siguiente operación utiliza el operador para devolver una matriz de elementos que se encuentran en $setDifference la flowerFieldB matriz pero no en la flowerFieldA matriz:

db.flowers.aggregate(
[
{ $project: { flowerFieldA: 1, flowerFieldB: 1, inBOnly: { $setDifference: [ "$flowerFieldB", "$flowerFieldA" ] }, _id: 0 } }
]
)

La operación devuelve los siguientes resultados:

{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "inBOnly" : [ "jasmine" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "inBOnly" : [ "jasmine" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "inBOnly" : [ [ "rose" ], [ "orchid" ] ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "inBOnly" : [ [ "rose", "orchid" ] ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ ], "inBOnly" : [ ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "inBOnly" : [ "rose" ] }
Califique esta página