$allO operador
$allseleciona 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.
Compatibilidade
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
Sintaxe
Para especificar uma expressão $all, use o seguinte protótipo:
{ <field>: { $all: [ <value1> , <value2> ... ] } }
Comportamento
Equivalente à operação $and
$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" } ] }
Array agrupada
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" ]
Array vazia
Quando um array vazio é passado, $all não encontra nenhum documento.
Exemplos
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.
Usar $all para combinar valores
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 } ]
Use $all com $elemMatch
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 descreenplayPelo menos um escritor tem um crédito de
titles, mas não um crédito deadaptation
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.
Exemplos adicionais
Para obter exemplos adicionais sobre como consultar arrays, consulte:
Para obter exemplos adicionais sobre queries, consulte Fazer query em documentos