Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / / /

$tudo

$all

O operador $all seleciona os documentos onde o valor de um campo corresponde a todos os valores especificados. Os documentos correspondentes podem conter um campo cujo valor seja um array contendo todos os elementos especificados, ou um campo com um único valor que corresponda ao elemento especificado.

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:

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" ]

Quando um array vazio é passado, $all não encontra nenhum documento.

Os exemplos nesta seção utilizam a coleção inventory que contém os seguintes documentos:

db.inventory.insertMany ( [
{
_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

Voltar

Consulta de array

Nesta página