Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

$setIsSubset (agregação)

$setIsSubset

Usa dois arrays e retorna true quando o primeiro array é um subconjunto do segundo, inclusive quando o primeiro array é igual ao segundo array, e false caso contrário.

$setIsSubset tem a seguinte sintaxe:

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

Os argumentos podem ser qualquerexpressão válida, desde que cada um deles resolva para uma array. Para mais informações sobre expressões, consulte Expressões.

$setIsSubset executa operação de conjunto em arrays, tratando arrays como conjuntos. Se uma array contiver entradas duplicadas, $setIsSubset ignora essas entradas. $setIsSubset ignora a ordem dos elementos.

Se um conjunto contiver um elemento de array aninhada, $setIsSubset não desce para a array aninhada, mas avalia a array no nível superior.

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

false

Não é um subconjunto, porque c não está presente na segunda array.

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

true

Ambos os elementos na primeira array estão presentes na segunda array.

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

true

Somente os elementos únicos da primeira array ["a", "b"] são considerados, então a primeira array é um subconjunto do segundo e o resultado é true, independentemente dos elementos duplicados ou de sua ordem.

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

false

A segunda array [ [ "a", "b" ] ] contém um único elemento, que por si só é uma array. Portanto, a primeira array [ "a", "b" ] não é considerada um subconjunto da segunda e o resultado é false.

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

true

Um conjunto vazio é considerado um subconjunto de qualquer conjunto.

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

true

Um conjunto é um subconjunto de si mesmo. Elementos duplicados não afetam a avaliação do subconjunto.

Considere uma coleção flowers com os seguintes 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" ] }
] )

A seguinte operação utiliza o operador $setIsSubset para determinar se a array flowerFieldA é um subconjunto da array flowerFieldB :

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

A operação retorna os seguintes 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 }

Voltar

$setIntersection

Nesta página