Questa query di aggiornamento aggiunge il JSON all'array nidificato, "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, in base alle condizioni di filtro specificate. Si noti che le condizioni del filtro indirizzano l'operazione di aggiornamento all'array specifico (degli array nidificati).
// 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" }
]
}
);
Poche cose da notare quando si aggiornano i documenti con array nidificati di nidificazione a più livelli.
- Utilizza l'operatore di tutte le posizioni
$[]
e l'operatore posizionale filtrato$[<identifier>]
, e non il$
operatore posizionale. Con l'operatore posizionale filtrato, specifica le condizioni del filtro dell'array utilizzandoarrayFilters
parametro. Tieni presente che questo indirizzerà il tuo aggiornamento per indirizzare l'array nidificato specifico. - Per l'operatore posizionale filtrato
$[<identifier>]
, l'identificatore deve iniziare con una lettera minuscola e contenere solo caratteri alfanumerici.
Riferimenti:
- Operatori di aggiornamento array
- db.collection.update() con arrayFilters