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 seleciona os documentos onde o valor de um campo corresponde a todos os valores especificados. Os documentos correspondentes podem conter um campo com um valor que é uma array contendo todos os elementos especificados ou um campo com um único valor correspondente ao elemento $all 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 para consultar $all a inventory collection para documentos onde o valor do tags campo é uma array cujos elementos appliance incluem, school booke:

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 existe para dar suporte a queries sobre arrays. Você também pode $all usar $all para selecionar em relação a uma array não field 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.