जवाबों:
इसे आज़माएँ: यदि आपका संग्रह 'उदाहरण' था
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});
tags.words
होना चाहिए $unset
, नहीं words
? सल्वाडोर डाली का जवाब भी देखें।
updateMany
के बजाय {multi:true}
, यानीdb.example.updateMany({},{"$unset":{words:""}})
शुरुआत में, मुझे यह नहीं मिला कि प्रश्न में एक उछाल क्यों है (मुझे लगा कि प्रश्न का एक अच्छा उत्तर है और जोड़ने के लिए कुछ भी नहीं है), लेकिन फिर मैंने देखा कि जो उत्तर स्वीकार किया गया था और 15 बार उखाड़ा गया था, वह वास्तव में गलत था!
हां, आपको $unset
ऑपरेटर का उपयोग करना होगा , लेकिन यह परेशान उन कुंजी शब्दों को हटाने जा रहा है जो किसी संग्रह के लिए दस्तावेज़ के लिए मौजूद नहीं हैं। तो मूल रूप से यह कुछ नहीं करेगा।
इसलिए आपको दस्तावेज़ के टैग और फिर डॉट नोटेशन का उपयोग करके शब्दों में देखने के लिए मोंगो को बताने की आवश्यकता है । तो सही क्वेरी है
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
बस पूरा करने के लिए, मैं इसे करने के दूसरे तरीके का उल्लेख करूंगा , जो कि बहुत बुरा है, लेकिन इस तरह से आप किसी भी कस्टम कोड के साथ फ़ील्ड बदल सकते हैं (यहां तक कि इस दस्तावेज़ से किसी अन्य फ़ील्ड के आधार पर)।
MongoDB में फ़ील्ड को हटाने या हटाने के लिए
एकल रिकॉर्ड के लिए
db.getCollection('userData').update({}, {$unset: {pi: 1}})
मल्टी रिकॉर्ड के लिए
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
मैं इसके समान कुछ करने की कोशिश कर रहा था, लेकिन एक एम्बेडेड दस्तावेज़ से कॉलम को हटा दें। इसका हल ढूंढने में मुझे थोड़ा समय लगा और यह पहली पोस्ट थी, जिसके बारे में मुझे पता चला, तो मैंने सोचा कि मैं इसे किसी और के लिए भी पोस्ट करूंगा।
तो कहने दें कि इसके बजाय आपका डेटा इस तरह दिखता है:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
words
एम्बेडेड दस्तावेज़ से कॉलम को निकालने के लिए , यह करें:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
या का उपयोग कर updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
$unset
केवल इसे संपादित होगा यदि मान मौजूद है, लेकिन यह एक सुरक्षित नेविगेशन काम नहीं चलेगा (यदि यह जाँच नहीं होते tags
पहले से मौजूद है) तो मौजूद है एम्बेडेड दस्तावेज़ पर की जरूरत है।
यह सभी स्थितीय ऑपरेटर ( $[]
) का उपयोग करता है जिसे संस्करण 3.6 में पेश किया गया था
डिफ़ॉल्ट रूप से, अद्यतन () विधि एकल दस्तावेज़ को अपडेट करती है। क्वेरी मापदंड से मेल खाने वाले सभी दस्तावेज़ों को अपडेट करने के लिए मल्टी पैरामीटर सेट करें।
संस्करण 3.6 में बदला गया। वाक्य - विन्यास :
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
उदाहरण :
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
आपके उदाहरण में:
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
शुरू करना Mongo 4.2
, थोड़ा अलग सिंटैक्स का उपयोग करना भी संभव है:
// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.update({}, [{ $unset: ["tags.words"] }], { many: true })
// { name: "book", tags: { lat: 33, long: 22 } }
अद्यतन विधि भी एक एकत्रीकरण पाइपलाइन स्वीकार कर सकते हैं (एक एकत्रीकरण पाइप लाइन के उपयोग वाचक वर्ग कोष्ठक ध्यान दें)।
इसका मतलब है कि $unset
उपयोग किया जा रहा ऑपरेटर एक एकत्रीकरण एक है ( "क्वेरी" एक के विपरीत ), जिसका सिंटैक्स फ़ील्ड की एक सरणी लेता है।
PyMongo (पायथन मोंगो) के लिए समाधान:
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
क्योंकि मैं इस पृष्ठ को खोज रहा था जब MongoEngine का उपयोग करके किसी फ़ील्ड को निकालने का तरीका खोज रहा था, मुझे लगता है कि यह MongoEngine तरीके को यहां भी पोस्ट करने में मददगार हो सकता है:
Example.objects.all().update(unset__tags__words=1)
{नाम: 'पुस्तक', टैग: {शब्द: ['एबीसी', '123'], अव्यक्त: 33, लंबा: 22}}
उत्तर:
db.tablename.remove ({ 'tags.words': [ 'एबीसी', '123']})
जाँच करना कि क्या "शब्द" मौजूद है और फिर दस्तावेज़ से हटाया जा रहा है
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
सच इंगित करता है कि मिलान होने पर कई दस्तावेज़ अपडेट करें।