यदि आप परमाणुता की परवाह नहीं करते हैं तो आप इसे save
. के साथ कर सकते हैं :
doc = db.myCollection.findOne({"_id": 123});
for (k in doc.field_to_prune) {
if (k === 'keep_field_1') continue;
if (k === 'keep_field_2') continue;
delete doc.field_to_prune[k];
}
db.myCollection.save(doc);
इस समाधान की मुख्य समस्या यह है कि यह परमाणु नहीं है। तो, doc
. के लिए कोई भी अपडेट findOne
. के बीच और save
खो जाएगा।
वैकल्पिक रूप से unset
. करना है doc
. को सेव करने के बजाय सभी अवांछित फ़ील्ड :
doc = db.myCollection.findOne({"_id": 123});
unset = {};
for (k in doc.field_to_prune) {
if (k === 'keep_field_1') continue;
if (k === 'keep_field_2') continue;
unset['field_to_prune.'+k] = 1;
}
db.myCollection.update({_id: doc._id}, {$unset: unset});
यह समाधान बहुत बेहतर है क्योंकि मोंगो update
चलाता है परमाणु रूप से, इसलिए कोई अपडेट खो नहीं जाएगा। और आप जो चाहते हैं उसे करने के लिए आपको किसी अन्य संग्रह की आवश्यकता नहीं है।