Tôi dường như gặp sự cố khi truy cập nội dung của một mảng được lồng trong một mảng trong tài liệu mongodb. Tôi không có vấn đề truy cập vào mảng đầu tiên "nhóm" với một truy vấn như sau ...MongoDB: cập nhật mảng trong mảng
db.orgs.update({_id: org_id, "groups._id": group_id} , {$set: {"groups.$.name": "new_name"}});
đâu tôi chạy vào rắc rối là khi tôi cố gắng để thay đổi các thuộc tính của một phần tử trong mảng "tính năng" lồng trong vòng mảng "nhóm".
Đây là những gì một tài liệu ví dụ trông giống như
{
"_id" : "v5y8nggzpja5Pa7YS",
"name" : "Example",
"display_name" : "EX1",
"groups" : [
{
"_id" : "s86CbNBdqJnQ5NWaB",
"name" : "Group1",
"display_name" : "G1",
"features" : [
{
_id : "bNQ5Bs8BWqJn6CdNa"
type : "blog",
name : "[blog name]"
owner_id : "ga5YgvP5yza7pj8nS"
},
]
},
]
},
Và đây là câu hỏi tôi đã cố gắng để sử dụng.
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "qBX3KDrtMeJGvZWXZ", "groups.features._id":"bNQ5Bs8BWqJn6CdNa" }, {$set: {"groups.$.features.$.name":"New Blog Name"}});
Nó trả về một thông báo lỗi:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "Too many positional (i.e. '$') elements found in path 'groups.$.features.$.name'"
}
})
Dường như Mongo không hỗ trợ thay đổi mảng lồng nhau trong mảng thông qua các yếu tố vị trí?
Có cách nào để sửa đổi mảng này mà không lấy toàn bộ nội dung, sửa đổi và sau đó đưa nó trở lại? Với nhiều tổ như thế này là nó thực hành tiêu chuẩn để tạo ra một bộ sưu tập mới? (Mặc dù dữ liệu chỉ cần thiết khi dữ liệu gốc là cần thiết) Tôi có nên thay đổi cấu trúc tài liệu sao cho mảng lồng nhau thứ hai là một đối tượng và truy cập nó qua khóa không? (Trong trường hợp khóa là giá trị số nguyên có thể hoạt động dưới dạng "_id")
groups.$.features.[KEY].name
Cách được coi là "đúng" để thực hiện việc này?