2013-02-03 5 views
7

Tôi đang gặp sự cố khi cập nhật nhiều bản ghi bằng cách sử dụng mongoosejs và nút. Vì một số lý do, tôi chỉ cập nhật một bản ghi, ngay cả khi có nhiều kết quả phù hợp. Tôi cũng nhận thấy rằng cuộc gọi lại sẽ không kích hoạt sau .update(). Tôi không nhận được bất kỳ thông báo lỗi nào. Những gì đang xảy ra ở đây?cập nhật nhiều bản ghi bằng cách sử dụng mongoosejs trong nút

Page.find({status:'queued'}) 
    .limit(queue_limit-queue.length) 
    .update({ status: 'active' },{ multi: true },function(err,num){ 
     console.log("updated "+num); 
     //this callback will never fire, but a single record will be updated and marked as active.                         
    }); 

Trả lời

14

Query#update không chấp nhận một tham số options, nhưng Model.update làm. Vì vậy, bạn muốn ghi lại điều này như:

Page.update({status:'queued'}, {status: 'active'}, {multi: true}, 
    function(err, num) { 
     console.log("updated "+num); 
    } 
); 

Tôi không chắc chắn những gì bạn đang cố gắng để làm với limit cuộc gọi trong chuỗi, nhưng bạn không thể sử dụng trong một bản cập nhật.

CẬP NHẬT

Các truy vấn trên sẽ cập nhật tất cả các tài liệu mà {status: 'queued'}. Lựa chọn duy nhất của bạn với update chỉ là lựa chọn đầu tiên {multi: false} hoặc tất cả các kết quả phù hợp {multi: true}.

Âm thanh như bạn cần phải làm lại mọi thứ để có tài liệu ra khỏi hàng đợi của bạn cùng một lúc và chuyển sang findOneAndUpdate thay vì update vì vậy bạn có thể truy cập doc bạn đã cập nhật từ 'queued' để 'active'.

+0

Điểm giới hạn là để làm cho nó vì vậy tôi chỉ cập nhật 10 bản ghi. Truy vấn của bạn có vẻ như sẽ cập nhật mọi thứ với '{status: 'queueued'}'. Tôi cũng cần gọi lại đầu tiên tôi đã sử dụng trong ví dụ của mình để xem bản ghi nào tôi đang thay đổi (và không chỉ số bị ảnh hưởng). – devnill

+0

@devnill mongodb chưa hỗ trợ bản cập nhật giới hạn – Sammaye

+0

@devnill Đúng vậy. Xem bản cập nhật để thay thế. – JohnnyHK