मैं बस इस तरह से SQL के बराबर MongoDB की खोज करते हुए आया था:
update t
set c1 = c2
where ...
सर्जियो सही है कि आप किसी अन्य संपत्ति को सीधे अद्यतन में मान के रूप में संदर्भित नहीं कर सकते हैं। हालांकि, 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 को छोड़े बिना उन्हें एक-एक करके अपडेट करने के लिए।
यदि आप मोंगोडीबी से कनेक्ट करने के लिए ड्राइवर का उपयोग कर रहे हैं तो मोंगोडीबी में जावास्क्रिप्ट की एक स्ट्रिंग भेजने का कोई तरीका होना चाहिए; उदाहरण के लिए, रूबी ड्राइवर के साथ आप उपयोग करेंगे 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 } }
);
});
})
अन्य भाषाएं समान होनी चाहिए।