Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$tudo

Nesta página

  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos
  • Exemplos adicionais
$all

O operador $all seleciona os documentos em que o valor de um campo é uma array que contém todos os elementos especificados.

Você pode utilizar o $all para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

Para especificar uma expressão $all, use o seguinte protótipo:

{ <field>: { $all: [ <value1> , <value2> ... ] } }

O $all é equivalente a uma operação $and dos valores especificados; ou seja, a seguinte declaração:

{ tags: { $all: [ "ssl" , "security" ] } }

é equivalente a:

{ $and: [ { tags: "ssl" }, { tags: "security" } ] }

Quando passou uma array de uma array agrupada (por exemplo [ [ "A" ] ] ), $all corresponde a documentos em que o campo contém a array agrupada como um elemento (por exemplo field: [ [ "A" ], ... ]) ou o campo é igual à array agrupada (por exemplo, field: [ "A" ]).

Por exemplo, considere a seguinte query [1]:

db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } )

A query é equivalente a:

db.articles.find( { $and: [ { tags: [ "ssl", "security" ] } ] } )

que é equivalente a:

db.articles.find( { tags: [ "ssl", "security" ] } )

Dessa forma, a expressão $all corresponde a documentos em que o campo tags é uma array que contém a array agrupada [ "ssl", "security" ] ou é uma array igual à array agrupada:

tags: [ [ "ssl", "security" ], ... ]
tags: [ "ssl", "security" ]
[1] A expressão $all com um elemento único é para fins ilustrativos, pois a expressão $all é desnecessária se corresponder somente a um único elemento. Em vez disso, ao combinar um único elemento, uma expressão "contém" (ou seja, arrayField: element) é mais adequada.

Os seguintes exemplos utilizam a collection inventory que contém os documentos:

{
_id: ObjectId("5234cc89687ea597eabee675"),
code: "xyz",
tags: [ "school", "book", "bag", "headphone", "appliance" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 45, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("5234cc8a687ea597eabee676"),
code: "abc",
tags: [ "appliance", "school", "book" ],
qty: [
{ size: "6", num: 100, color: "green" },
{ size: "6", num: 50, color: "blue" },
{ size: "8", num: 100, color: "brown" }
]
}
{
_id: ObjectId("5234ccb7687ea597eabee677"),
code: "efg",
tags: [ "school", "book" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 100, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("52350353b2eff1353b349de9"),
code: "ijk",
tags: [ "electronics", "school" ],
qty: [
{ size: "M", num: 100, color: "green" }
]
}

A seguinte operação utiliza o operador $all para consultar a collection inventory para documentos onde o valor do campo tags é uma array cujos elementos incluem appliance, school e book:

db.inventory.find( { tags: { $all: [ "appliance", "school", "book" ] } } )

A query acima retorna os seguintes documentos:

{
_id: ObjectId("5234cc89687ea597eabee675"),
code: "xyz",
tags: [ "school", "book", "bag", "headphone", "appliance" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 45, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("5234cc8a687ea597eabee676"),
code: "abc",
tags: [ "appliance", "school", "book" ],
qty: [
{ size: "6", num: 100, color: "green" },
{ size: "6", num: 50, color: "blue" },
{ size: "8", num: 100, color: "brown" }
]
}

Se o campo contiver uma array de documentos, você poderá usar $all com o operador $elemMatch.

A operação a seguir faz uma query da collection inventory para documentos em que o valor do campo qty é uma array cujos elementos correspondem aos critérios $elemMatch:

db.inventory.find( {
qty: { $all: [
{ "$elemMatch" : { size: "M", num: { $gt: 50} } },
{ "$elemMatch" : { num : 100, color: "green" } }
] }
} )

A consulta retorna os seguintes documentos:

{
"_id" : ObjectId("5234ccb7687ea597eabee677"),
"code" : "efg",
"tags" : [ "school", "book"],
"qty" : [
{ "size" : "S", "num" : 10, "color" : "blue" },
{ "size" : "M", "num" : 100, "color" : "blue" },
{ "size" : "L", "num" : 100, "color" : "green" }
]
}
{
"_id" : ObjectId("52350353b2eff1353b349de9"),
"code" : "ijk",
"tags" : [ "electronics", "school" ],
"qty" : [
{ "size" : "M", "num" : 100, "color" : "green" }
]
}

O operador $all existe para dar suporte a queries sobre arrays. Mas você pode usar o operador $all para selecionar em relação a um field que não seja uma array, como no exemplo a seguir:

db.inventory.find( { "qty.num": { $all: [ 50 ] } } )

No entanto, use o formato a seguir para expressar a mesma query:

db.inventory.find( { "qty.num" : 50 } )

Ambas as queries selecionarão todos os documentos na collection inventory onde o valor do campo num é igual a 50.

Observação

Na maioria dos casos, o MongoDB não trata as arrays como conjuntos. Este operador fornece uma exceção notável a esta abordagem.

Para obter exemplos adicionais sobre como consultar arrays, consulte:

Para obter exemplos adicionais sobre queries, consulte Fazer query em documentos

Dica

Veja também:

Voltar

Consulta de array