Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$all (operador de predicado da query)

$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, use o seguinte $all protótipo:

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

O operador é $all $and equivalente a uma operação para os valores especificados. Por exemplo, a seguinte declaração:

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

é equivalente a:

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

Quando é passada uma array contendo uma array agrupada (por[ [ "A" ] ] exemplo,), corresponde a documentos em que o campo atende a uma dessas$all condições:

  • O campo contém o array aninhado como um elemento, como field: [ [ "A" ], ... ].

  • O campo é igual ao array agrupado, como 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 $all expressão corresponde a documentos em que o tags campo é uma array que contém a array agrupada [ "ssl", "security" ] ou é uma array igual à array agrupada:

tags: [ [ "ssl", "security" ], ... ]
tags: [ "ssl", "security" ]

Quando passou uma array vazia, não corresponde a nenhum$all documento.

Os exemplos nesta seção usam 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 query a coleção 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 o $all com o $elemMatch operador.

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 query sobre array. Você também pode usar $all para selecionar em relação a um field que não seja um 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 selecionam todos os documentos na coleção 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 Ler documentos.