2011-06-13 10 views
5

MongoDB में की अद्यतन संशोधक अर्थ विज्ञान, इस प्रकार अद्यतन संशोधक सेट किए बिना काम करता है के रूप में:

एक संग्रह उपयोगकर्ताओं के साथ एक मोंगो डीबी डाटाबेस db पर विचार करें। उपयोगकर्ताओं को निम्नलिखित प्रारूप का, एक दस्तावेज़ होते हैं:,

>db.users.update({"username":"joe"},{"$unset":{"relationships.terminated": "many"}}); 

मेरा प्रश्न है:

//Document for a user with username: joe 
{ 
    "_id" : ObjectId("4df5b9cf9f9a92b1584fff16"), 
    "relationships" : { 
      "enemies" : 2, 
      "friends" : 33, 
      "terminated" : "many" 
    }, 
    "username" : "joe" 
} 

मैं समाप्त कुंजी को निकालना चाहते हैं, मैं इस प्रकार $ सेट किए बिना अद्यतन संशोधक निर्दिष्ट करना क्यों बजाय बस को निर्दिष्ट करने की, मैं $ सेट किए बिना काम करने के लिए समस्त कुंजी मान युग्म निर्दिष्ट करने के लिए है:

>db.users.update({"username":"joe"},{"$unset":{"relationships.terminated"}}); 

Mon Jun 13 13:25:57 SyntaxError: missing : after property id (shell):1 

क्यों नहीं?

संपादित:

$ सेट नहीं करने के लिए जिस तरह से पूरे कुंजी वैल्यू पेयर को, JSON विनिर्देशों के अनुसार, या "1" बयान के, क्यों कर सकते हैं 'जोड़ने के लिए मूल्य के रूप में है, तो शैल "1" प्रतिस्थापन खुद करते हैं? ऐसी सुविधा क्यों उपलब्ध नहीं है? क्या इस तरह के समर्थन प्रदान करने के कोई नुकसान हैं?

उत्तर

25

संक्षिप्त उत्तर इसलिए है क्योंकि {"relationships.terminated"} मान्य जेसन/बीसन ऑब्जेक्ट नहीं है। एक JSON ऑब्जेक्ट एक कुंजी और मान से बना होता है, और {"relationships.terminated"} में केवल एक कुंजी होती है (या मान, इस पर निर्भर करता है कि आप इसे कैसे देखते हैं)।

मोंगो में एक क्षेत्र को अनसेट करने के लिए सौभाग्य से आपको उस क्षेत्र का वास्तविक मूल्य निर्धारित करने की आवश्यकता नहीं है जिसे आप निकालना चाहते हैं।

db.users.update({"username":"joe"},{"$unset":{"relationships.terminated" : 1}}); 
+0

धन्यवाद, कि उपयोगी है – DhruvPathak

+0

क्यों नहीं 'db.users.update ({" उपयोगकर्ता नाम ":" जो आप किसी भी मूल्य (1 सामान्यतः मोंगो डॉक्स में प्रयोग किया जाता है) कोई बात नहीं relationships.terminated के वास्तविक मूल्य का उपयोग कर सकते "}, {" $ unset ": [" relationship.terminated "]});'? –