Jeg stødte lige på dette, mens jeg søgte efter MongoDB-ækvivalenten til SQL som denne:
update t
set c1 = c2
where ...
Sergio har ret i, at du ikke kan henvise til en anden egenskab som en værdi i en lige opdatering. Dog db.c.find(...)
returnerer en cursor, og den markør har en forEach
metode
:
Så du kan sige ting som dette:
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 } }
);
});
at opdatere dem én ad gangen uden at forlade MongoDB.
Hvis du bruger en driver til at oprette forbindelse til MongoDB, så burde der være en måde at sende en streng JavaScript ind i MongoDB; for eksempel, med Ruby-driveren ville du bruge 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 } }
);
});
})
Andre sprog bør ligne hinanden.