Ik kwam dit net tegen tijdens het zoeken naar het MongoDB-equivalent van SQL, zoals dit:
update t
set c1 = c2
where ...
Sergio heeft gelijk dat je niet kunt verwijzen naar een andere eigenschap als een waarde in een directe update. Echter, db.c.find(...)
geeft een cursor terug en die cursor heeft een forEach
methode
:
Dus je kunt dit soort dingen zeggen:
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 } }
);
});
om ze een voor een bij te werken zonder MongoDB te verlaten.
Als je een stuurprogramma gebruikt om verbinding te maken met MongoDB, dan zou er een manier moeten zijn om een JavaScript-reeks naar MongoDB te sturen; met het Ruby-stuurprogramma zou u bijvoorbeeld 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 } }
);
});
})
Andere talen zouden vergelijkbaar moeten zijn.