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

Mongodb cập nhật phần tử cụ thể từ mảng con

Vấn đề trong mã của bạn là dot-notation bởi vì Khi bạn chỉ định ký hiệu dấu chấm, bạn giả sử rằng tiêu chí bộ lọc được chỉ định phải khớp với phần tử mảng duy nhất đáp ứng tất cả các tiêu chí. Nhưng nó không. Ký hiệu dấu chấm trên mảng có thể nhận bất kỳ phần tử mảng nào nếu bất kỳ tiêu chí đơn lẻ nào phù hợp. Đó là lý do tại sao bạn nhận được bản cập nhật bất ngờ.

Bạn phải sử dụng $elemMatch để khớp với tất cả các bộ lọc trong array yếu tố.

db.coll.update({
'_id' : 28,
n: { 
   $elemMatch:{
       a : new ObjectId('4ef85a3e46b3b84408000000'),
       c : 28 }
   }
},
{
  $push : {
     'n.$.p' : ObjectId("4b97e62bf1d8c7152c9ccb74")
  },
  $set : {
     'n.$.t' : ISODate("2013-05-13T14:22:46.777Z")
  }
})

và đầu ra là

    {
        "a" : ObjectId("4ef85a3e46b3b84408000000"),
        "c" : 28,
        "p" : [
            ObjectId("4f00631046b3b85002000000"),
            ObjectId("4b97e62bf1d8c7152c9ccb74")
        ],
        "t" : ISODate("2013-05-13T14:22:46.777Z"),
        "u" : 26
    }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Đặt nhiều trường với một truy vấn cập nhật

  2. Mảng tra cứu MongoDB của các đối tượng theo trường (điều kiện tham gia và truy vấn phụ không tương quan)

  3. Morphia / MongoDB:Truy cập đối tượng nhúng từ đối tượng @Embedded

  4. Làm thế nào để chuyển đổi SQL dạng quan hệ nhiều-nhiều thành đối tượng mongoDB?

  5. mongodb kiểm tra xem điểm có nằm trong đa giác không