Właśnie natknąłem się na to podczas wyszukiwania odpowiednika MongoDB SQL w ten sposób:
update t
set c1 = c2
where ...
Sergio ma rację, że nie można odwoływać się do innej właściwości jako wartości w prostej aktualizacji. Jednak db.c.find(...)
zwraca kursor i ten kursor ma forEach
metoda
:
Możesz więc powiedzieć takie rzeczy:
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 } }
);
});
aktualizować je pojedynczo bez opuszczania MongoDB.
Jeśli używasz sterownika do łączenia się z MongoDB, powinien istnieć sposób na przesłanie ciągu JavaScript do MongoDB; na przykład ze sterownikiem Ruby użyjesz 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 } }
);
});
})
Inne języki powinny być podobne.