Току-що попаднах на това, докато търсех еквивалента на MongoDB на SQL по следния начин:
update t
set c1 = c2
where ...
Sergio е прав, че не можете да посочите друго свойство като стойност в права актуализация. Въпреки това, db.c.find(...)
връща курсор и този курсор има forEach
метод
:
Така че можете да кажете неща като това:
db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
db.QUESTIONS.update(
{ _id: q._id },
{ $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
);
});
за да ги актуализирате един по един, без да излизате от MongoDB.
Ако използвате драйвер за свързване към MongoDB, тогава трябва да има някакъв начин да изпратите низ от JavaScript в MongoDB; например с драйвера Ruby бихте използвали eval
:
connection.eval(%q{
db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
db.QUESTIONS.update(
{ _id: q._id },
{ $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
);
});
})
Другите езици трябва да са подобни.