2011-07-27 21 views
171
{ 
    name: 'book', 
    tags: { 
     words: ['abc','123'], 
     lat: 33, 
     long: 22 
    } 
} 

मान लीजिए कि यह एक दस्तावेज़ है। मैं इस संग्रह में सभी दस्तावेजों से पूरी तरह से "words" कैसे हटा सकता हूं? मैं सभी दस्तावेजों "words" बिना रहना चाहता हूँ:मोंगोडीबी दस्तावेज़ से पूरी तरह से फ़ील्ड को कैसे निकालें?

{ 
    name: 'book', 
    tags: { 
     lat: 33, 
     long: 22 
    } 
} 

उत्तर

300

इस प्रयास करें: यदि आपका संग्रह 'उदाहरण'

db.example.update({}, {$unset: {words:1}}, false, true); 

था इस संदर्भ लें:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset

अद्यतन :

उपर्युक्त लिंक अब '$ unset'ing' को शामिल नहीं करता है। निक कॉटरेल की टिप्पणी नीचे जाने का रास्ता है। यदि आप संग्रह में सभी दस्तावेजों से इस क्षेत्र को हटाना चाहते हैं तो {multi: true} जोड़ना सुनिश्चित करें; अन्यथा, यह केवल उन दस्तावेज़ों को हटा देगा जो इसे मेल खाते हैं। अद्यतन प्रलेखन के लिए इस देखें:

https://docs.mongodb.com/manual/reference/operator/update/unset/

उदाहरण:

db.example.update({}, {$unset: {words:1}} , {multi: true}); 
+0

क्या आप जानते हैं कि झूठी, सच्ची काम क्यों? –

+61

नए संस्करण अधिक पढ़ने योग्य प्रारूप का समर्थन करते हैं: 'db.example.update ({}, {$ unset: {words: 1}}, {multi: true})' –

+2

db.example.update ({}, {$ unset : {फ़ील्ड: 1, बहु: सत्य}}) निक की क्वेरी मेरे लिए काम नहीं करती है। –

103

शुरुआत मैं क्यों सवाल एक इनाम है नहीं मिला पर (मैंने सोचा था कि सवाल एक अच्छा जवाब है और वहाँ है जोड़ने के लिए कुछ भी नहीं), लेकिन फिर मैंने देखा कि जिस जवाब को स्वीकार किया गया था और 15 बार उखाड़ फेंक दिया गया था वह वास्तव में गलत था!

हां, आपको $unset operator का उपयोग करना होगा, लेकिन यह अनसेट शब्द शब्दों को हटाने जा रहा है जो किसी संग्रह के लिए दस्तावेज़ के लिए मौजूद नहीं है। तो मूल रूप से यह कुछ भी नहीं करेगा।

तो आपको दस्तावेज़ टैग को देखने के लिए और फिर dot notation का उपयोग करने वाले शब्दों में मोंगो को बताना होगा। तो सही सवाल है।

db.example.update(
    {}, 
    { $unset: {'tags.words':1}}, 
    false, true 
) 
बस पूरा होने की खातिर मैं another way of doing it के पास भेजेगा, जो बहुत खराब है के लिए

है, लेकिन इस तरह से आप किसी भी कस्टम कोड के साथ क्षेत्र को बदल सकते हैं (यहां तक ​​कि इस दस्तावेज़ से दूसरे क्षेत्र के आधार पर)।

0

जांचना कि "शब्दों" मौजूद है और फिर दस्तावेज़

db.users.update({"tags.words" :{$exists: true}}, 
              {$unset:{"tags.words":1}},false,true); 

सच से निकालने अद्यतन एक से अधिक दस्तावेज़ इंगित करता है मेल नहीं खाते।

-6

एक पैकेज का संदर्भ और विभिन्न "कुंजी" निकालने के लिए, इस

db['name1.name2.name3.Properties'].remove([ 
{ 
    "key" : "name_key1" 
}, 
{ 
    "key" : "name_key2" 
}, 
{ 
    "key" : "name_key3" 
} 
)] 
10

कोशिश MongoDB

  • में क्षेत्र हटाने या एकल रिकॉर्ड के लिए हटाने के लिए

    db.getCollection('userData').update({}, {$unset: {pi: 1}}) 
    
  • मल्टी रिकॉर्डके लिए
  • db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true}) 
    
-2

आप भी 3.4

में इस परियोजना का उपयोग करके एकत्रीकरण में ऐसा कर सकते हैं {$ परियोजना: { "tags.words": 0}}

0
db.example.updateMany({},{"$unset":{"tags.words":1}}) 

हम भी कर सकते हैं एकाधिक दस्तावेज़ों को अद्यतन करने के लिए इसका इस्तेमाल करें।

संबंधित मुद्दे