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

Cách cập nhật giá trị mảng trong Mongoose

Bạn không thể sử dụng cả $set $push trong cùng một biểu thức cập nhật như các toán tử lồng nhau.

Cú pháp chính xác để sử dụng các toán tử cập nhật như sau:

{
   <operator1>: { <field1>: <value1>, ... },
   <operator2>: { <field2>: <value2>, ... },
   ...
}

nơi <operator1>, <operator2> có thể từ bất kỳ danh sách toán tử cập nhật nào được chỉ định tại đây.

Để thêm một phần tử mới vào mảng, một $push toán tử sẽ đủ, ví dụ:bạn có thể sử dụng findByIdAndUpdate cập nhật phương thức để trả lại tài liệu đã sửa đổi dưới dạng

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { "$push": { "childrens": employee._id } },
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

Sử dụng update() ban đầu của bạn phương thức, cú pháp là

Employeehierarchy.update(
   { "_id": employeeparent._id},
   { "$push": { "childrens": employee._id } },
   function (err, raw) {
       if (err) return handleError(err);
       console.log('The raw response from Mongo was ', raw);
   }
);

trong đó hàm gọi lại nhận các đối số (err, raw) ở đâu

  • err là lỗi nếu có xảy ra
  • raw là câu trả lời đầy đủ từ Mongo

Vì bạn muốn kiểm tra tài liệu đã sửa đổi, tôi khuyên bạn nên sử dụng findByIdAndUpdate kể từ khi update() phương thức sẽ không cung cấp cho bạn tài liệu đã sửa đổi, chỉ là kết quả ghi đầy đủ từ mongo.

Nếu bạn muốn cập nhật một trường trong tài liệu và thêm một phần tử vào một mảng cùng một lúc thì bạn có thể thực hiện

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { 
        "$set": { "name": "foo" },
        "$push": { "childrens": employee._id } 
    } 
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

Ở trên sẽ cập nhật name trường thành "foo" và thêm id nhân viên vào childrens mảng.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tốt nhất để lưu trữ MongoDB trên DigitalOcean

  2. Đếm các trường trong Bộ sưu tập MongoDB

  3. Tìm kiếm văn bản đầy đủ với trọng lượng trong mongoose

  4. Làm thế nào bạn có thể chỉ định thứ tự của các thuộc tính trong một đối tượng javascript cho một chỉ mục MongoDB trong node.js?

  5. Cập nhật tài liệu con chứa trong một mảng có trong tài liệu MongoDB