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

Làm cách nào để bạn cập nhật các đối tượng trong mảng của tài liệu (cập nhật lồng nhau)

Đối với câu hỏi số 1, chúng ta hãy chia nó thành hai phần. Đầu tiên, tăng bất kỳ tài liệu nào có "items.item_name" bằng "my_item_two". Đối với điều này, bạn sẽ phải sử dụng toán tử vị trí "$". Một cái gì đó như:

 db.bar.update( {user_id : 123456 , "items.item_name" : "my_item_two" } , 
                {$inc : {"items.$.price" : 1} } , 
                false , 
                true);

Lưu ý rằng điều này sẽ chỉ tăng tài liệu con phù hợp đầu tiên trong bất kỳ mảng nào (vì vậy nếu bạn có một tài liệu khác trong mảng có "item_name" bằng "my_item_two", thì tài liệu đó sẽ không được tăng lên). Nhưng đây có thể là những gì bạn muốn.

Phần thứ hai phức tạp hơn. Chúng ta có thể đẩy một mục mới vào một mảng không có "my_item_two" như sau:

 db.bar.update( {user_id : 123456, "items.item_name" : {$ne : "my_item_two" }} , 
                {$addToSet : {"items" : {'item_name' : "my_item_two" , 'price' : 1 }} } ,
                false , 
                true);

Đối với câu hỏi số 2 của bạn, câu trả lời dễ dàng hơn. Để tăng tổng và giá của item_three trong bất kỳ tài liệu nào có chứa "my_item_three", bạn có thể sử dụng toán tử $ inc trên nhiều trường cùng một lúc. Một cái gì đó như:

db.bar.update( {"items.item_name" : {$ne : "my_item_three" }} ,
               {$inc : {total : 1 , "items.$.price" : 1}} ,
               false ,
               true);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose Model.find không phải là một hàm?

  2. Làm cách nào để kiểm tra xem một trường mảng có chứa một giá trị duy nhất hay một mảng khác trong MongoDB?

  3. Chiến lược đăng ký / xuất bản Meteor cho các bộ sưu tập phía máy khách duy nhất

  4. mongoengine - Truy vấn trên ListField của EmbeddedDocumentField

  5. Công dụng của Jade hoặc Handlebars khi viết ứng dụng AngularJs