2014-11-01 11 views
10

Muszę zaktualizować kilka dokumentów, podając je w treści. Nie mogę ich przesłać, muszą one zostać dostarczone.Zaktualizuj wiele dokumentów, dostarczając dokumenty w treści, mongoose/mongodb

Przykład:

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

Te dane znajdują się w organizmie i chcę ustawić aktywną właściwość 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) 
}; 

Kod ten nie jest dobry. Czy jest jakieś lepsze zapytanie, aby to zrobić? Nie znajduję żadnych w dokumentach.

Odpowiedz

19

Spróbuj użyć polecenia aktualizacji wraz z "$in" Operator:

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

Jest to podstawowe podejście wybierając więcej niż jeden dokument z '$ in', ale [ Komenda '.update()'] (http://docs.mongodb.org/manual/reference/method/db.collection.update/) wymaga ["multi"] (http://docs.mongodb.org/ parametr manual/reference/method/db.collection.update/# multi-parameter), aby faktycznie zmienić więcej niż pierwszy dopasowany dokument. –

+0

Dzięki za korektę :-) Zaktualizowałem odpowiedź: – Protostome

+2

Jak radziłbyś sobie z różnymi wartościami w aktywnej zmiennej? –

Powiązane problemy