Truy vấn cập nhật này thêm JSON vào mảng lồng nhau, "SERVICES.VERSIONS.GROUPS.CUSTOMERS"
, dựa trên các điều kiện lọc được chỉ định. Lưu ý rằng các điều kiện bộ lọc của bạn hướng thao tác cập nhật đến mảng cụ thể (trong số các mảng lồng nhau).
// 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" }
]
}
);
Một số điều cần lưu ý khi cập nhật tài liệu có mảng lồng nhau trong số nhiều cấp lồng nhau.
- Sử dụng tất cả toán tử vị trí
$[]
và người điều hành vị trí được lọc$[<identifier>]
, và không phải$
toán tử vị trí.Với toán tử vị trí được lọc, chỉ định điều kiện lọc mảng bằng cách sử dụngarrayFilters
tham số. Lưu ý rằng điều này sẽ hướng bản cập nhật của bạn nhắm mục tiêu đến mảng lồng nhau cụ thể. - Đối với toán tử vị trí được lọc
$[<identifier>]
, mã bảo mật phải bắt đầu bằng chữ thường và chỉ chứa các ký tự chữ và số.
Tài liệu tham khảo:
- Cập nhật mảng Hoạt động
- db.collection.update () với arrayFilters