Saya baru saja menemukan ini saat mencari padanan MongoDB dari SQL seperti ini:
update t
set c1 = c2
where ...
Sergio benar bahwa Anda tidak dapat mereferensikan properti lain sebagai nilai dalam pembaruan langsung. Namun, db.c.find(...)
mengembalikan kursor dan kursor tersebut memiliki forEach
metode
:
Jadi Anda bisa mengatakan hal-hal seperti ini:
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 } }
);
});
untuk memperbaruinya satu per satu tanpa meninggalkan MongoDB.
Jika Anda menggunakan driver untuk terhubung ke MongoDB maka harus ada beberapa cara untuk mengirim string JavaScript ke MongoDB; misalnya, dengan driver Ruby Anda akan menggunakan 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 } }
);
});
})
Bahasa lain harus serupa.