Docs Menu
Docs Home
/ /

$setIsSubset (agregación)

$setIsSubset

Toma dos matrices y devuelve true cuando la primera matriz es un subconjunto de la segunda, incluso cuando la primera matriz es igual a la segunda matriz, y false en caso contrario.

$setIsSubset tiene la siguiente sintaxis:

{ $setIsSubset: [ <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.

$setIsSubset realiza operaciones de conjunto en matrices, tratándolas como conjuntos. Si una matriz contiene entradas duplicadas, $setIsSubset las ignora. $setIsSubset ignora el orden de los elementos.

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

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

false

No es un subconjunto, porque c no está presente en la segunda matriz.

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

true

Ambos elementos del primer arreglo están presentes en el segundo arreglo.

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

true

Solo se consideran los elementos únicos del primer arreglo ["a", "b"], por lo que el primer arreglo es un subconjunto del segundo y el resultado es true, independientemente de los elementos duplicados o su orden.

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

false

La segunda matriz [ [ "a", "b" ] ] contiene un solo elemento, que a su vez es una matriz. Por lo tanto, la primera matriz [ "a", "b" ] no se considera un subconjunto de la segunda y el resultado es false.

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

true

Un conjunto vacío se considera un subconjunto de cualquier conjunto.

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

true

Un conjunto es un subconjunto de sí mismo. Los elementos duplicados no afectan la evaluación del subconjunto.

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 determinar si $setIsSubset la flowerFieldA matriz es un subconjunto de la flowerFieldB matriz:

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

La operación devuelve los siguientes resultados:

{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "AisSubset" : true }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "AisSubset" : false }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "AisSubset" : false }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ ], "AisSubset" : true }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "AisSubset" : true }

Volver

$setIntersection

En esta página