Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में आंशिक डेटा कैसे डिलीट करें?

MongoDB में skip() और map() का उपयोग करके आंशिक डेटा डिलीट करना

डॉक्यूमेंट्स के एक सबसेट को डिलीट करने के लिए (उदाहरण के लिए, पहले N के बाद सभी), आप मिलान करने वाले _id मानों को इकट्ठा करने के लिए skip(), toArray(), और map() का उपयोग कर सकते हैं, फिर $in के साथ remove() का उपयोग कर सकते हैं।

नमूना डेटा बनाना (10 डॉक्यूमेंट्स)

> db.deleteDemo.insertOne({"Name":"John"});  // 1
> db.deleteDemo.insertOne({"Name":"Carol"}); // 2
> db.deleteDemo.insertOne({"Name":"Sam"});   // 3
> db.deleteDemo.insertOne({"Name":"David"}); // 4
> db.deleteDemo.insertOne({"Name":"Robert"}); // 5
> db.deleteDemo.insertOne({"Name":"Chris"}); // 6
> db.deleteDemo.insertOne({"Name":"Mike"});  // 7
> db.deleteDemo.insertOne({"Name":"Bob"});   // 8
> db.deleteDemo.insertOne({"Name":"James"}); // 9
> db.deleteDemo.insertOne({"Name":"Jace"});  // 10

सभी डॉक्यूमेंट्स देखना

> db.deleteDemo.find();

आउटपुट: सभी 10 डॉक्यूमेंट्स _id के साथ क्रम में सूचीबद्ध।

5वें रिकॉर्ड के बाद के डॉक्यूमेंट्स डिलीट करना

> var value = db.deleteDemo.find({}, { _id: 1 }).skip(5).toArray().map(function(documentValue) {
  return documentValue._id;
});
> db.deleteDemo.remove({ _id: { $in: value } });
WriteResult({ "nRemoved" : 5 })

चरण-दर-चरण व्याख्या

  1. find({}, { _id: 1 }) - केवल _id फील्ड प्रोजेक्ट करता है (कुशल)।
  2. skip(5) - पहले 5 डॉक्यूमेंट्स को छोड़ देता है।
  3. toArray() - शेष कर्सर को ऐरे में परिवर्तित करता है।
  4. map(...) - प्रत्येक डॉक्यूमेंट से केवल _id मान निकालता है।
  5. remove({ _id: { $in: value } }) - एकत्रित _id वाले सभी डॉक्यूमेंट्स डिलीट करता है।

शेष डॉक्यूमेंट्स वेरिफाई करना

> db.deleteDemo.find();

आउटपुट:

{ "_id" : ObjectId("5cd550492cba06f46efe9f06"), "Name" : "John" }
{ "_id" : ObjectId("5cd5504d2cba06f46efe9f07"), "Name" : "Carol" }
{ "_id" : ObjectId("5cd550512cba06f46efe9f08"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd5505d2cba06f46efe9f09"), "Name" : "David" }
{ "_id" : ObjectId("5cd550682cba06f46efe9f0a"), "Name" : "Robert" }

आधुनिक सर्वोत्तम अभ्यास

  • remove() के बजाय deleteMany() का उपयोग करें (MongoDB 3.2+ में पेश किया गया)।
  • बड़े कलेक्शन के लिए, skip() धीमा हो सकता है; रेंज क्वेरी के लिए इंडेक्स्ड फील्ड (जैसे बनाई गई तिथि) का उपयोग करने पर विचार करें।
  • उत्पादन में, बड़े डिलीट ऑपरेशन्स के लिए ट्रांजैक्शन या बल्क राइट्स का उपयोग करें।
चेतावनी: यह ऑपरेशन अपरिवर्तनीय है। बड़े डिलीट चलाने से पहले हमेशा क्वेरी के साथ वेरिफाई करें।
  1. - MongoDB फ़ंक्शन: विशिष्ट डेटा/मान कैसे लौटाएं?

    विशिष्ट डेटा लौटाने के लिए MongoDB में findOne() का उपयोग करें। findOne() मेथड संग्रह पर निर्दिष्ट क्वेरी मानदंड को पूरा करने वाला एक दस्तावेज़ लौटाता है। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo473.insertOne( ... { ...    "_id" : new ObjectId(), ...    &qu

  1. - MongoDB में आंशिक डेटा कैसे हटाएं?

    हटाए जाने वाले मान को वेरिएबल में सेट करें। आंशिक डेटा हटाने के लिए remove() का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo488.insertOne({"Name":"Chris"});{    "acknowledged" : true,    "insertedId" : ObjectId("5e

  1. MongoDB टिप्स: भाग 1 - उन्नत डेटाबेस प्रबंधन के लिए आवश्यक रणनीतियाँ MongoDB टिप्स: भाग 1 - उन्नत डेटाबेस प्रबंधन के लिए आवश्यक रणनीतियाँ

    मूल रूप से Tricore द्वारा प्रकाशित: 2 अगस्त, 2017 MongoDB के साथ शुरुआत करना आसान है, लेकिन जब आप एप्लिकेशन बना रहे होते हैं तो अधिक जटिल समस्याएं सामने आती हैं। आप खुद से ऐसे सवाल पूछ सकते हैं: रीप्लिका सेट में रीप्लिका सदस्य को कैसे री-सिंक करें? क्रैश के बाद MongoDB को कैसे रिकवर करें? MongoDB क