Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$setIntersection (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo
$setIntersection

Obtém dois ou mais arrays e retorna uma array que contém os elementos que aparecem em cada array de entrada.

$setIntersection tem a seguinte sintaxe:

{ $setIntersection: [ <array1>, <array2>, ... ] }

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

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

$setIntersection filtra duplicatas em seu resultado para gerar uma matriz que contém apenas entradas únicas. A ordem dos elementos na matriz de saída não é especificada.

Se nenhuma interseção for encontrada (ou seja, as arrays de entrada não contêm elementos comuns), $setIntersection retornará uma array vazia.

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

Exemplo
Resultado
{ $setIntersection: [ [ "a", "b", "a" ], [ "b", "a" ] ] }
[ "b", "a" ]
{ $setIntersection: [ [ "a", "b" ], [ [ "a", "b" ] ] ] }
[ ]

Esta seção contém exemplos que mostram o uso do $setIntersection com collections.

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 operação a seguir usa o operador $setIntersection para gerar uma array de elementos comuns à array flowerFieldA e à array flowerFieldB :

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

A operação retorna os seguintes resultados:

{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ], "commonToBoth" : [ "orchid", "rose" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ], "commonToBoth" : [ "orchid", "rose" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ], "commonToBoth" : [ "orchid", "rose" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ], "commonToBoth" : [ "rose" ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ], "commonToBoth" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ], "commonToBoth" : [ ] }
{ "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ], "commonToBoth" : [ ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ ], "commonToBoth" : [ ] }
{ "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ], "commonToBoth" : [ ] }
← $setField (agregação)