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

$setEIgals (agregação)

$setEquals

Compara dois ou mais arrays e retorna true caso tenham os mesmos elementos distintos e false caso contrário.

$setEquals tem a seguinte sintaxe:

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

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

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

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

false

As arrays não contêm os mesmos elementos.

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

false

As arrays não contêm os mesmos elementos.

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

true

Ambas as arrays contêm os mesmos elementos únicos. Quando tratada como conjuntos, a primeira array é [ "a", "b" ] porque as duplicatas são ignoradas.

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

false

Os elementos nas arrays não são iguais. A primeira array contém as strings "a" e "b", enquanto a segunda contém uma array [ "a", "b" ].

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

false

Os elementos nas arrays não são iguais. A primeira array está vazia e a segunda array tem dois elementos de string.

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

false

As arrays não contêm os mesmos elementos únicos. A primeira array contém apenas "a", enquanto a segunda array contém "a" e "b".

Considere uma collection bakeryOrders com os seguintes 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: [] }
] )

A operação a seguir usa o operador $setEquals para determinar se os arrays cakes e cupcakes em cada pedido contêm os mesmos sabores:

db.bakeryOrders.aggregate(
[
{
$project: {
_id: 0,
cakes: 1,
cupcakes: 1,
sameFlavors: { $setEquals: [ "$cakes", "$cupcakes" ] }
}
}
] )

Observação

$project

O estágio $project especifica quais campos são incluídos nos documentos de saída. Neste exemplo, o estágio $project:

  • Exclui o campo _id da saída.

  • Inclui os campos cakes e cupcakes na saída.

  • Gera o resultado do operador $setEquals em um novo campo chamado sameFlavors.

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

Voltar

$setDifference

Nesta página