MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

फ़ील्ड के ज्ञात सेट को छोड़कर मैं सभी फ़ील्ड्स को कैसे अनसेट कर सकता हूँ?

यदि आप परमाणुता की परवाह नहीं करते हैं तो आप इसे 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 चलाता है परमाणु रूप से, इसलिए कोई अपडेट खो नहीं जाएगा। और आप जो चाहते हैं उसे करने के लिए आपको किसी अन्य संग्रह की आवश्यकता नहीं है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. आराम कॉल करने में असमर्थ

  2. MongoDB इंटीग्रिटी अपडेट एज केस

  3. MongoDB अपने स्थानिक सूचकांक को कैसे लागू करता है?

  4. mongodb को infinispan कैश स्टोर के रूप में उपयोग करने का अपवाद

  5. MongoDB में स्ट्रिंग के रूप में ग्रिड को संग्रहीत करने में क्या कमियां हैं?