Esta consulta de atualização adiciona o JSON à matriz aninhada,
"SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, com base nas condições de filtro especificadas. Observe que suas condições de filtro direcionam a operação de atualização para o array específico (dos arrays aninhados). // JSON document to be added to the CUSTOMERS array
new_cust = {
"CUSTOMER_CONFIG_ID": "6",
"ACTIVATION_DATE": "31-03-2020",
"STATUS": "Y"
}
db.collection.update(
{
"SERVICE_CATEGORY": "COMMON_SERVICE",
"SERVICES.SERVICE_NAME": "Authentication Service",
"SERVICES.VERSIONS.VERSION_NAME": "AuthenticationServiceV6_3"
},
{
$push: { "SERVICES.$[s].VERSIONS.$[v].GROUPS.$[g].CUSTOMERS": new_cust }
},
{
multi: true,
arrayFilters: [
{ "s.SERVICE_NAME": "Authentication Service" },
{ "v.VERSION_NAME": "AuthenticationServiceV6_3" },
{ "g.GROUP_NAME": "TEST GROUP" }
]
}
);
Algumas coisas a serem observadas ao atualizar documentos com matrizes aninhadas de mais de um nível de aninhamento.
- Use o operador de todas as posições
$[]
e o operador posicional filtrado$[<identifier>]
, e não o$
operador posicional. Com o operador posicional filtrado, especifique as condições do filtro de matriz usando osarrayFilters
parâmetro. Observe que isso direcionará sua atualização para direcionar a matriz aninhada específica. - Para o operador posicional filtrado
$[<identifier>]
, o identificador deve começar com uma letra minúscula e conter apenas caracteres alfanuméricos.
Referências:
- Operadores de atualização de matriz
- db.collection.update() com arrayFilters