Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do 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 com um valor que é uma array contendo todos os elementos especificados ou um campo com um único valor correspondente 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> ... ] } }

$all é equivalente a uma operação dos valores especificados. Por exemplo, as duas queries a seguir são $and equivalentes:

{ tags: { $all: [ "ssl" , "security" ] } }
{ $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 página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

A seguinte operação utiliza o operador para consultar $all a movies collection para documentos onde o valor do directors campo é uma array cujos elementos incluem John Murray Anderson Pèl Fejèse:

db.movies.find( { directors: { $all: ['John Murray Anderson','Pèl Fejès'] } }, { title: 1, directors: 1, year: 1 })

A query acima retorna o seguinte documento:

[
{
_id: ObjectId('573a1391f29313caabcd9336'),
title: 'King of Jazz',
directors: [ 'John Murray Anderson', 'Pèl Fejès' ],
year: 1930
}
]

Para corresponder a várias condições em um único elemento de array ou em uma array de documentos, você pode usar $all com o $elemMatch operador.

A operação a seguir faz query da collection embedded_movies para documentos onde:

  • Pelo menos um escritor tem um crédito de story, mas não tem um crédito de screenplay

  • Pelo menos um escritor tem um crédito de titles, mas não um crédito de adaptation

db.embedded_movies.find(
{ writers: { $all: [
{ $elemMatch: { $regex: '\\bstory\\b', $not: { $regex: '\\bscreenplay\\b' }}},
{ $elemMatch: { $regex: '\\btitles\\b', $not: { $regex: '\\badaptation\\b' }}}
]}},
{ title: 1, writers: 1, year: 1 })

A consulta retorna os seguintes documentos:

[
{
"_id": {
"$oid": "573a1391f29313caabcd93a3"
},
"title": "Men Without Women",
"writers": [
"John Ford (story)",
"James Kevin McGuinness (story)",
"Dudley Nichols (screen play and scenario)",
"Otis C. Freeman (titles)"
],
"year": 1930
},
{
"_id": {
"$oid": "573a1391f29313caabcd8319"
},
"title": "For Heaven's Sake",
"writers": [
"Ted Wilde (story)",
"John Grey (story)",
"Clyde Bruckman (story)",
"Ralph Spence (titles)"
],
"year": 1926
},
{
"_id": {
"$oid": "573a1391f29313caabcd7bc3"
},
"title": "The Iron Horse",
"writers": [
"Charles Kenyon (story)",
"John Russell (story)",
"Charles Kenyon (scenario)",
"Charles Darnton (titles)"
],
"year": 1924
}
]

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

arrays

Nesta página