Esta consulta de actualización agrega el JSON a la matriz anidada, "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, en función de las condiciones de filtro especificadas. Tenga en cuenta que las condiciones de su filtro dirigen la operación de actualización a la matriz específica (de las matrices anidadas).
// 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" }
]
}
);
Algunas cosas a tener en cuenta al actualizar documentos con matrices anidadas de más de un nivel de anidamiento.
- Usar el operador de todas las posiciones
$[]
y el operador posicional filtrado$[<identifier>]
, y no el$
operador posicional. Con el operador posicional filtrado, especifique las condiciones del filtro de matriz mediantearrayFilters
parámetro. Tenga en cuenta que esto dirigirá su actualización para apuntar a la matriz anidada específica. - Para el operador posicional filtrado
$[<identifier>]
, el identificador debe comenzar con una letra minúscula y contener solo caracteres alfanuméricos.
Referencias:
- Operadores de actualización de matrices
- db.collection.update() con arrayFilters