Тази заявка за актуализиране добавя JSON към вложения масив "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, въз основа на определените условия на филтъра. Имайте предвид, че условията на вашия филтър насочват операцията за актуализиране към конкретния масив (от вложените масиви).
// 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" }
]
}
);
Няколко неща, които трябва да отбележите, когато актуализирате документи с вложени масиви на повече от едно ниво на гнездене.
- Използвайте оператора за всички позиции
$[]
и филтрираният позиционен оператор$[<identifier>]
, и не$
позиционен оператор. С филтриран позиционен оператор посочете условията за филтриране на масива, като използватеarrayFilters
параметър. Имайте предвид, че това ще насочи вашата актуализация към конкретния вложен масив. - За филтрирания позиционен оператор
$[<identifier>]
, идентификаторът трябва да започва с малка буква и да съдържа само буквено-цифрови знаци.
Препратки:
- Оператори за актуализиране на масив
- db.collection.update() с arrayFilters