2011-07-14 26 views
35

Tôi thấy kịch bản sau đây:làm thế nào tôi có thể cập nhật nhiều tài liệu trong mongoose

Device.find(function(err, devices) { 
    devices.forEach(function(device) { 
    device.cid = ''; 
    device.save(); 
    }); 
}); 

MongoDB có "đa" cờ cho một bản cập nhật qua nhiều tài liệu nhưng tôi đã không thể có được điều này làm việc với cầy mangut. Điều này chưa được hỗ trợ hay tôi đang làm điều gì sai?

Device.update({}, {cid: ''}, false, true, function (err) { 
    //... 
}); 

Trả lời

56

Hiện nay tôi tin rằng update() trong Mongoose có một số vấn đề, xem: https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erghttps://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion.

Tuy nhiên, hãy kiểm tra tài liệu để cập nhật: http://mongoosejs.com/docs/api.html (bên dưới Mô hình). Định nghĩa là:

Model.update = function (query, doc, options, callback) { ... } 

Bạn cần phải vượt qua các tùy chọn bên trong một đối tượng, do đó, mã của bạn sẽ là:

Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... }); 

Tôi tin rằng Mongoose kết thúc tốt đẹp cid của bạn trong một $ bộ, vì vậy đây không phải là giống như chạy bản cập nhật tương tự trong trình bao mongo. Nếu bạn chạy nó trong trình bao thì tất cả các tài liệu sẽ được thay thế bằng một với một đơn cid: ''.

+0

này thực hiện chính xác những gì tôi muốn ... để cập nhật CIDs để 'tất cả Devices'. cám ơn – pkyeck

8

Bạn phải sử dụng đa: true tùy chọn

Device.update({},{cid: ''},{multi: true}); 
Các vấn đề liên quan