Cette requête de mise à jour ajoute le JSON au tableau imbriqué, "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, en fonction des conditions de filtre spécifiées. Notez que vos conditions de filtre dirigent l'opération de mise à jour vers le tableau spécifique (des tableaux imbriqués).
// 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" }
]
}
);
Peu de choses à noter lors de la mise à jour de documents avec des tableaux imbriqués de plus d'un niveau d'imbrication.
- Utilisez l'opérateur toutes positions
$[]
et l'opérateur de position filtré$[<identifier>]
, et pas le$
opérateur de position.Avec l'opérateur de position filtré, spécifiez les conditions de filtrage du tableau à l'aide dearrayFilters
paramètre. Notez que cela dirigera votre mise à jour pour cibler le tableau imbriqué spécifique. - Pour l'opérateur de position filtré
$[<identifier>]
, l'identifiant doit commencer par une lettre minuscule et ne contenir que des caractères alphanumériques.
Références :
- Opérateurs de mise à jour de tableau
- db.collection.update() avec arrayFilters