Deze updatequery voegt de JSON toe aan de geneste array, "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, gebaseerd op de gespecificeerde filtervoorwaarden. Merk op dat uw filtervoorwaarden de update naar de specifieke array (van de geneste arrays) sturen.
// 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" }
]
}
);
Weinig dingen om op te letten bij het bijwerken van documenten met geneste arrays van meer dan één niveau nesten.
- Gebruik de all-positionele operator
$[]
en de gefilterde positionaloperator$[<identifier>]
, en niet de$
positionele operator. Met gefilterde positionele operator specificeert u de arrayfiltervoorwaarden met behulp van dearrayFilters
parameter. Houd er rekening mee dat uw update hierdoor wordt gericht op de specifieke geneste array. - Voor de gefilterde positionele operator
$[<identifier>]
, moet de identifier beginnen met een kleine letter en alleen alfanumerieke tekens bevatten.
Referenties:
- Array UpdateOperators
- db.collection.update() met arrayFilters