2016-12-13 2 views
2

Я использую Mongoose и имею требование обновлять многие документы на основе некоторых вычислений.Mongoose найти много и обновить все

Это очень просто, если я запрашивая один за другим, но если я говорю 50 пунктов, я не хочу, чтобы запрашивать и обновлять один на один

То, что я делаю, курируя запрос, чтобы тянуть назад несколько документов, поэтому я могу их пропустить и внести изменения.

Однако вы не можете вызвать сохранение на нескольких объектах, например, с помощью findOne. Его мой первый раз с мангуста, но в Entity Framework, я могу редактировать возвращаемые результаты из запроса и вызвать SaveChanges(), чтобы обновить каждый элемент, который изменился

Я хочу сделать что-то вроде этого

item.find(query).exec(function(err, items) { 
    for (i in items) { 
    // change stuff 
    } 
    items.save(function (err) { 
    // saved 
    } 
} 

ответ

0

Если вы пытаетесь сделать некоторые простые изменения в этих документах, возможно,

update({_id:{$in:[a,b,c]}}, {$inc:{score:1}}, {multi:true}).exec() может помочь.

2

Если у ¨R с использованием библиотеки Promise и можно сделать так:

var Promise = require('bluebird'); 
var saveQuery=[]; 
item.find(query).exec(function(err, items) { 
    for (i in items) { 
    // change stuff 
    } 
saveQuery.push(item.save()); // Write your save query 
} 
    return Promise.all(saveQuery); // this will do your all save queries at once simultaneously. 
Смежные вопросы