2014-11-01 20 views
10

Tôi cần cập nhật một số tài liệu bằng cách cung cấp chúng trong phần nội dung. Tôi không thể truy vấn chúng, chúng phải được cung cấp.Cập nhật nhiều tài liệu bằng cách cung cấp tài liệu trong cơ thể, mongoose/mongodb

Ví dụ:

var persons = [ 
    {id: 1, name'Joe', active: false}, 
    {id:2, name:'Jane', active: false}) 
]; 

dữ liệu này được cung cấp trong cơ thể và tôi muốn thiết lập thuộc tính tích cực false.

exports.setActivePropertyOnPersons = function(input,callback){ 
    for(var i = 0;i<input.body.length;i++){ 
    mongoose.model('person').findOne({id:input.body[i].id}, function(err, person){ 
     person.active = false; 
     person.save(); 
    }) 
    } 
    callback.send(200) 
}; 

Mã này cảm thấy không tốt. Có truy vấn nào tốt hơn để làm điều này không? Tôi không tìm thấy bất kỳ tài liệu nào trong tài liệu.

Trả lời

19

Hãy thử sử dụng các lệnh cập nhật cùng với các "$in" điều hành:

var ids= []; 
for (var i=0 i<input.body.length; ++i) { 
    ids.push(input.body[i].id); 
} 

mongoose.model('person').update({id : {"$in":ids}}, {active:false} , {multi: true} , function(err,docs) { ... }); 

Hope this helps

+4

Đây là phương pháp cơ bản bằng cách chọn nhiều hơn một tài liệu với '$ in', nhưng [ Lệnh '.update()'] (http://docs.mongodb.org/manual/reference/method/db.collection.update/) cần [[multi]] (http://docs.mongodb.org/ tham số thủ công/tham chiếu/phương pháp/db.collection.update/# multi-parameter) để thực sự thay đổi nhiều hơn so với tài liệu đầu tiên phù hợp. –

+0

Cảm ơn bạn đã sửa :-) Tôi đã cập nhật câu trả lời – Protostome

+2

Bạn sẽ xử lý các giá trị khác nhau trong biến hoạt động như thế nào? –

Các vấn đề liên quan