Tôi có một tài liệu MongoDB với 2 mức mảng lồng nhau sâu sắc về đối tượng mà tôi cần phải cập nhật, một cái gì đó như thế này:Đang cập nhật mảng lồng trong MongoDB
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
Nếu chỉ có một mảng sâu cấp I có thể sử dụng khai thác vị trí để cập nhật các đối tượng trong nó nhưng đối với mức độ thứ hai lựa chọn duy nhất tôi đã đưa ra là sử dụng toán tử vị trí với chỉ số lồng nhau của đối tượng, như thế này:
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
cách tiếp cận này hoạt động nhưng có vẻ như nguy hiểm đối với tôi kể từ khi tôi 'xây dựng một dịch vụ web và số chỉ số sẽ đến từ clie nt có thể gửi 100000 là chỉ mục và điều này sẽ buộc mongodb tạo một mảng với 100000 chỉ mục có giá trị null. Có bất kỳ cách nào khác để cập nhật các đối tượng lồng nhau trong đó tôi có thể tham chiếu đến ID của đối tượng thay vì vị trí của nó hay có thể là cách kiểm tra xem chỉ mục được cung cấp có vượt quá giới hạn trước khi sử dụng nó trong truy vấn không? Không.
Tôi khuyên bạn nên truy cập lại lược đồ này và tìm thiết kế khác để bạn có thể tận dụng sức mạnh mà MongoDB cung cấp. Sẽ không có cách nào dễ dàng/siêu hiệu quả để cập nhật một mục cụ thể trong mảng AFAIK. Bạn có thể thiết kế lại nó để bạn có thể tận dụng 'addToSet',' pop' và các toán tử mảng khác không? – brianz
Cảm ơn bạn đã đề xuất, vâng tôi có thể và trên thực tế tôi đã làm điều đó. Đặt câu hỏi này tôi chỉ muốn chắc chắn rằng tôi không thiếu gì cả. – Anton
Tôi cũng phải đối mặt với cùng một vấn đề. Bạn có thể đăng lược đồ được thiết kế lại mẫu của mình không? – Damodaran