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

MongoDB findOneAndDelete ()

MongoDB में db.collection.findOneAndDelete() विधि एकल दस्तावेज़ को हटा देती है, और हटाए गए दस्तावेज़ को वापस कर देती है।

यह संग्रह में पहले मेल खाने वाले दस्तावेज़ को हटा देता है जो filter . से मेल खाता है . sort पैरामीटर का उपयोग यह प्रभावित करने के लिए किया जा सकता है कि कौन सा दस्तावेज़ हटाया गया है।

collection भाग उस संग्रह का नाम है जिससे दस्तावेज़ को हटाना है।

उदाहरण

मान लीजिए हमारे पास pets . नामक संग्रह है जिसमें निम्नलिखित दस्तावेज शामिल हैं:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }

हम db.collection.findOneAndDelete() . का उपयोग कर सकते हैं उन दस्तावेज़ों में से किसी एक को हटाने की विधि।

db.pets.findOneAndDelete(
   { "type": "Cat" }
)

परिणाम:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

इस मामले में मैंने इसे केवल बिल्लियों तक सीमित करने के लिए एक प्रश्न का उपयोग किया। संग्रह में दो बिल्लियाँ होने के बावजूद केवल एक बिल्ली को हटाया गया था।

आइए संग्रह की जाँच करें।

db.pets.find()

परिणाम:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }

हम देख सकते हैं कि पहली बिल्ली (दस्तावेज़ 3) हटा दी गई है।

एम्बेडेड दस्तावेज़

यदि आपके पास ऐसे दस्तावेज़ हैं जिनमें एम्बेडेड दस्तावेज़ हैं, तो आप एम्बेडेड दस्तावेज़ों में डेटा क्वेरी करने के लिए निम्न विधियों का उपयोग कर सकते हैं।

  • डॉट नोटेशन (उदा. field.nestedfield: <value> )
  • नेस्टेड फ़ॉर्म (उदा. { field: { nestedfield: <value> } } ) ध्यान दें कि यह विकल्प केवल MongoDB 4.4 से उपलब्ध है।

यहां एक उदाहरण दिया गया है जो एम्बेडेड दस्तावेज़ में क्वेरी करने के लिए डॉट नोटेशन का उपयोग करता है।

db.pets.findOneAndDelete({ "specs.height": 400 })

परिणाम:

{
	"_id" : 6,
	"name" : "Fetch",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
}

जैसा अपेक्षित था, दस्तावेज़ 6 हटा दिया गया था।

निम्न क्वेरी उसी दस्तावेज़ को हटा देती है, लेकिन इस मामले में यह एम्बेडेड दस्तावेज़ को संदर्भित करने के लिए नेस्टेड प्रपत्र का उपयोग करती है।

db.pets.findOneAndDelete({ 
    "specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
 })

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

db.pets.findOneAndDelete({ 
    "specs" : {
		"height" : 400
	}
 })

परिणाम:

null

सरणी

आप सरणी तत्व को उसके सूचकांक या उसके मान द्वारा संदर्भित करके सरणियों में डेटा का संदर्भ दे सकते हैं।

अगर हम सभी कुत्तों को शीर्ष कुत्ता पुरस्कार से हटाना चाहते हैं, तो हम निम्नलिखित प्रश्न लिख सकते हैं (जो उपरोक्त कुत्ते को वापस कर देगा)।

db.pets.findOneAndDelete({ 
    "awards": "Top Dog"
})

परिणाम:

{
	"_id" : 7,
	"name" : "Jake",
	"type" : "Dog",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

आप एलिमेंट इंडेक्स को इस तरह भी निर्दिष्ट कर सकते हैं:

db.pets.findOneAndDelete({ 
    "awards.0": "Top Dog"
})

ऐसा करने के लिए आवश्यक है कि निर्दिष्ट मान निर्दिष्ट अनुक्रमणिका पर हो। इसलिए, निम्न क्वेरी उसी कुत्ते को वापस नहीं करती है।

db.pets.findOneAndDelete({ 
    "awards.1": "Top Dog"
})

ध्यान दें कि सरणियाँ शून्य-आधारित हैं, इसलिए 0 का सूचकांक पहले तत्व को निर्दिष्ट करता है, 1 दूसरे तत्व को निर्दिष्ट करता है, और इसी तरह।

sort पैरामीटर

आप sort . का उपयोग कर सकते हैं filter . द्वारा मिलान किए गए दस्तावेज़ों के लिए सॉर्टिंग क्रम निर्दिष्ट करने के लिए पैरामीटर . यह प्रभावित करेगा कि कौन सा दस्तावेज़ हटाया गया है।

sort का उपयोग करते समय पैरामीटर, 1 . का मान दस्तावेज़ों को आरोही क्रम में क्रमबद्ध करता है, और -1 . का मान होता है उन्हें अवरोही क्रम में क्रमबद्ध करता है।

तर्क को एक दस्तावेज़ के रूप में प्रदान करने की आवश्यकता है। उदाहरण के लिए, { sort: { "salary": 1 } } salary . के आधार पर छाँटें फ़ील्ड आरोही क्रम में।

उदाहरण के लिए, मान लें कि हम employees . नामक एक संग्रह बनाते हैं निम्नलिखित दस्तावेजों के साथ:

db.employees.insertMany([
    { _id: 1, name: "Sandy", salary: 55000 },
    { _id: 2, name: "Sarah", salary: 128000 },
    { _id: 3, name: "Fritz", salary: 25000 },
    { _id: 4, name: "Chris", salary: 45000 },
    { _id: 5, name: "Beck", salary: 82000 }
    ])

हम 60000 से कम वेतन वाले दस्तावेज़ों को खोजने के लिए निम्नलिखित कोड चला सकते हैं, फिर उनमें से सबसे कम वेतन वाले दस्तावेज़ को हटा सकते हैं।

db.employees.findOneAndDelete(
   { "salary": { $lt: 60000 } },
   {
       sort: { "salary": 1 }
    }
)

परिणाम:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }

जैसा कि अपेक्षित था, सबसे कम वेतन वाले कर्मचारी को हटा दिया गया था।

दस्तावेज़ अब इस तरह दिखते हैं।

db.employees.find()

परिणाम:

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

तो हम देख सकते हैं कि फ़्रिट्ज़ को हटा दिया गया है।

आइए इसे वापस मूल दस्तावेज़ पर वापस लाते हैं।

db.employees.remove({})
db.employees.insertMany([
    { _id: 1, name: "Sandy", salary: 55000 },
    { _id: 2, name: "Sarah", salary: 128000 },
    { _id: 3, name: "Fritz", salary: 25000 },
    { _id: 4, name: "Chris", salary: 45000 },
    { _id: 5, name: "Beck", salary: 82000 }
    ])

अब वही findOneAndDelete() चलाते हैं कोड फिर से, लेकिन इस बार हम इसे अवरोही क्रम में क्रमबद्ध करेंगे।

db.employees.findOneAndDelete(
   { "salary": { $lt: 60000 } },
   {
       sort: { "salary": -1 }
    }
)

परिणाम:

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }

इस बार सैंडी को हटा दिया गया।

आइए फिर से संग्रह की जाँच करें।

db.employees.find()

परिणाम:

{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

जैसी उम्मीद थी, सैंडी अब संग्रह में नहीं है।

अधिक जानकारी

db.collection.findOneAndDelete() विधि अन्य मापदंडों को भी स्वीकार करती है, जैसे कि projection (वापस जाने के लिए फ़ील्ड का एक सबसेट निर्दिष्ट करने के लिए), maxTimeMS , और collation

अधिक जानकारी के लिए MongoDB दस्तावेज़ देखें।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सभी मौजूदा फ़ील्ड शामिल करें और दस्तावेज़ में नए फ़ील्ड जोड़ें

  2. उल्का:अप्रत्याशित मोंगो निकास कोड 100

  3. Mongo में केस असंवेदनशील खोज

  4. लार्वा जेनसेजर्स को मोंगोडब एटलस क्लस्टर से कनेक्ट करें

  5. MongoDB डेटा-एट-रेस्ट को एन्क्रिप्ट करना