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

Mongodb:đẩy phần tử vào mảng lồng nhau nếu điều kiện được đáp ứng

Vấn đề ở đây là bạn hiểu sai những điều đối phó.

Khi bạn thực hiện "outerArray.field.innerArray": { $in: [ 1, 3 ] } vào truy vấn của bạn, bạn không chỉ nhận được innerArray nơi có 1 hoặc 3. Bạn là tài liệu gettings tồn tại các mảng này.

Vì vậy, bạn đang truy vấn toàn bộ tài liệu.

Bạn phải sử dụng arrayFilter để cập nhật các giá trị khi bộ lọc phù hợp.

Vì vậy, nếu tôi đã hiểu đúng về bạn, thì truy vấn bạn muốn là:

db.collection.update(
{}, //Empty object to find all documents
{
  $push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
  "arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})

Ví dụ tại đây

Lưu ý cách đối tượng đầu tiên vào update trống rỗng. Bạn phải đặt ở đó trường để khớp với tài liệu (không phải mảng, tài liệu).

Nếu bạn chỉ muốn cập nhật một tài liệu, bạn phải điền vào đối tượng đầu tiên (đối tượng truy vấn) với các giá trị bạn muốn, ví dụ:{"_id": 11} .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối với bộ bản sao MongoDB bằng rmongodb

  2. Mongoose:findOneAndUpdate không cập nhật trường hiện có

  3. MongoDB MapReduce cập nhật tại chỗ làm thế nào để

  4. Tổng hợp MongoDb

  5. mongodb Java Driver - $ group với nhiều trường