MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cập nhật bản ghi sâu trong MongoDb

Vấn đề là bạn không thể sử dụng $ toán tử để hiển thị sự phù hợp ở các mức lồng nhau trong một mảng. Và quan trọng nhất là bạn chỉ có thể chỉ định một lần.

Như đã nêu từ tài liệu , đó có phải là $ không sẽ chỉ khớp với đầu tiên phần tử được tìm thấy. Điều đó không chỉ có nghĩa là nếu bạn có nhiều kết quả phù hợp cho truy vấn của mình thì chỉ có kết quả đầu tiên được chọn, điều đó cũng có nghĩa là chỉ phù hợp đầu tiên vị trí mảng sẽ được sử dụng. Điều đó có nghĩa là một cái gì đó như thế này cũng sẽ không hoạt động:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Vì điều đó sẽ khớp nhầm với index 1 định giá và cập nhật một mặt hàng mà bạn không mong đợi.

Nếu bạn có thể cập nhật toàn bộ mảng thì điều sau sẽ hoạt động:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Đó là như tôi đã nói, bởi vì index phù hợp với đầu tiên mảng.

Nhưng với cấu trúc mà bạn có, có vẻ như lựa chọn tốt nhất của bạn là thay đổi mảng cấp cao nhất đó thành một tài liệu con thay thế. Trừ khi trên thực tế, điều này có lý do là một mảng, thay vì hai các loại tài liệu hỗn hợp như hiện nay.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. `các trường không được giống nhau:'' và '' lỗi mongoimport

  2. Làm cách nào để xóa chỉ một hoặc hai trường khỏi tài liệu trong mongodb?

  3. mongodb cách thay đổi cổng mặc định

  4. Bộ sưu tập dựa trên nhiều hợp đồng thuê nhà trong dữ liệu mùa xuân mongo

  5. Tổng hợp theo ngày trong Mongodb