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

MongoDB cập nhật tất cả các trường lỗi mảng

CHỈNH SỬA

Chi tiết bị thiếu trong câu hỏi là trường bắt buộc để cập nhật thực sự nằm trong tài liệu phụ . Điều này thay đổi đáng kể câu trả lời:

Đây là hạn chế của những gì bạn có thể có thể làm với việc cập nhật các phần tử mảng. Và điều này được giải thích rõ ràng trong tài liệu . Chủ yếu là trong đoạn này:

Vì vậy, đây là điều. Đang cố gắng cập nhật tất cả của các phần tử mảng trong một câu lệnh như thế này sẽ không công việc. Để làm được điều này, bạn phải thực hiện những điều sau đây.

db.warehouses.find({ "items.qty": { "$gt": 0 } }).forEach(function(doc) {
    doc.items.forEach(function(item) {
        item.qty = 0;
    });
    db.warehouses.update({ "_id": doc._id }, doc );
})

Về cơ bản, đó là cách cập nhật mọi phần tử mảng.

multi cài đặt trong .update() nghĩa là trên nhiều "tài liệu". Nó không thể được áp dụng cho nhiều phần tử của một mảng. Vì vậy, lựa chọn tốt nhất hiện nay là thay thế toàn bộ. Hoặc trong trường hợp này, chúng tôi cũng có thể thay thế cả toàn bộ tài liệu vì chúng tôi vẫn cần làm điều đó.

Đối với thực dữ liệu hàng loạt, sử dụng db.eval () . Nhưng vui lòng đọc tài liệu đầu tiên:

db.eval(function() {
    db.warehouses.find({ "items.qty": { "$gt": 0 } }).forEach(function(doc) {
        doc.items.forEach(function(item) {
            item.qty = 0;
        });
        db.warehouses.update({ "_id": doc._id }, doc );
    });
})

Đang cập nhật tất cả các phần tử trong một mảng trên toàn bộ bộ sưu tập không đơn giản.

Bản gốc

Khá chính xác những gì lỗi nói. Để sử dụng toán tử vị trí, bạn cần phải khớp một cái gì đó đầu tiên. Như trong:

db.warehouses.update(
    // query 
    {
        _id:ObjectId('5322f07e139cdd7e31178b78'),
        "items.qty": { "$gt": 0 }
    },    
    // update 
    {
        $set:{"items.$.qty":0}
    },    
    // options 
    {
        "multi" : true,  
        "upsert" : true  
    }
);

Vậy trận đấu ở đâu điều kiện vây vị trí trong số các mục nhỏ hơn 0 thì chỉ mục đó được chuyển cho toán tử vị trí.

P.S :Khi muti sự thật nó có nghĩa là nó cập nhật mọi tài liệu. Để lại nó false nếu bạn chỉ có nghĩa là một . Cái nào là mặc định.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào tôi có thể chọn một số bản ghi cho một trường cụ thể bằng cách sử dụng mongodb?

  2. Lập mô hình nhiều thành nhiều:thông qua Mongoid / MongoDB

  3. Đếm cả mảng nhúng bên ngoài và bên trong trong một truy vấn duy nhất

  4. Làm cách nào để xử lý một hàm băm tùy ý được trả về từ mongo khi đang di chuyển (sử dụng mgo)?

  5. Kết nối cơ sở dữ liệu sao băng