$[identificador] (Posicional Filtrado)
Última atualização: 2026-10-09
$[identificador] (Posicional Filtrado)
$[identificador] é o operador posicional que, junto com arrayFilters, atualiza apenas os elementos do array que correspondem a uma condição. `{ $set: { 'grades.$[elem]': 90 } }, { arrayFilters: [{ 'elem.grade': { $gte: 85 } }] }`. A atualização de array mais flexível, introduzida no MongoDB 3.6; os identificadores são definidos em arrayFilters e podem corresponder a campos de documentos aninhados.
| Categoria | Modificador de Atualização |
|---|---|
| Versão do MongoDB | 3.6+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ <operador de atualização>: { '<campo de array>.$[<identificador>]': <valor> } }, { arrayFilters: [ { '<identificador>.<campo>': <condição> } ] }
⚙️ Parâmetros
| campo de array | O campo de matriz a atualizar. |
|---|---|
| identificador | Um espaço reservado definido em arrayFilters, por exemplo elem. |
| arrayFilters | A matriz de condições que define as regras de correspondência de identificadores. |
Retorno:O resultado da atualização
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $[elem]: atualiza apenas notas >= 85
// arrayFilters define a regra do elem
db.students.updateOne(
{ _id: 1 },
{ $set: { 'grades.$[elem]': 100 } },
{ arrayFilters: [{ 'elem': { $gte: 85 } }] }
)
Saída:
// Apenas notas de 85 ou mais viram 100; o restante permanece inalterado
📌 Notas
- Identificadores em arrayFilters não carregam o prefixo $
- Suporta documentos aninhados e condições de vários campos
- Não pode ser misturado com $ ou $[] no mesmo caminho de atualização
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre $[elem] e $[]?
A$[] atualiza todos os elementos; $[elem] com arrayFilters atualiza apenas os correspondentes.
QComo escrevo arrayFilters?
A{ arrayFilters: [{ 'elem': { $gte: 85 } }] }; identificadores não têm prefixo $.
QPosso filtrar em campos aninhados?
ASim, ex.: { 'elem.type': 'exam' }.