Diese Aktualisierungsabfrage fügt den JSON dem verschachtelten Array "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
hinzu , basierend auf den angegebenen Filterbedingungen. Beachten Sie, dass Ihre Filterbedingungen den Aktualisierungsvorgang auf das spezifische Array (der verschachtelten Arrays) lenken.
// 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" }
]
}
);
Beim Aktualisieren von Dokumenten mit verschachtelten Arrays sind einige Dinge zu beachten von mehr als einer Verschachtelungsebene.
- Verwenden Sie den reinen Positionsoperator
$[]
und der gefilterte Positionsoperator$[<identifier>]
, und nicht das$
Positionsoperator. Mit gefiltertem Positionsoperator spezifizieren Sie die Array-Filterbedingungen mit denarrayFilters
Parameter. Beachten Sie, dass dies Ihre Aktualisierung auf das spezifische verschachtelte Array ausrichtet. - Für den gefilterten Positionsoperator
$[<identifier>]
, muss die Kennung mit einem Kleinbuchstaben beginnen und darf nur alphanumerische Zeichen enthalten.
Referenzen:
- Array-Aktualisierungsoperatoren
- db.collection.update() mit arrayFilters