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

मोंगोडीबी $पुल

MongoDB में, आप $pull . का उपयोग कर सकते हैं सरणी से मान निकालने के लिए ऑपरेटर।

$pull का उपयोग करें update() . जैसी विधि के संयोजन के साथ निर्दिष्ट दस्तावेज़ को परिवर्तन के साथ अद्यतन करने के लिए।

उदाहरण

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

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

हम दस्तावेज़ 1 में सरणी से एक तत्व को इस तरह से हटा सकते हैं:

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)

आउटपुट:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

वह संदेश हमें बताता है कि एक दस्तावेज़ का मिलान हुआ और एक (यानी एक ही दस्तावेज़) को संशोधित किया गया।

आइए अब इस संग्रह पर एक नज़र डालते हैं:

db.products.find()

परिणाम:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

हम देख सकते हैं कि दस्तावेज़ 1 में सरणी का मान XXL . है निर्दिष्ट के अनुसार हटा दिया गया।

एकाधिक मान हटाएं

हम $in . का उपयोग कर सकते हैं एक से अधिक मान निर्दिष्ट करने के लिए ऑपरेटर जिसे हम सरणी से हटाना चाहते हैं।

उदाहरण:

db.products.update( 
  { _id: 3 }, 
  { $pull: { sizes: { $in: ["XS", "XL"] } } } 
)

आउटपुट:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

आइए अब संग्रह को फिर से देखें:

db.products.find()

परिणाम:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

हम देख सकते हैं कि दस्तावेज़ 3 में दो निर्दिष्ट तत्वों को सरणी से हटा दिया गया है।

सभी दस्तावेज़ अपडेट करें

आप multi: true add जोड़ सकते हैं या updateMany() . का उपयोग करें मानदंड से मेल खाने वाले सभी दस्तावेज़ों को अद्यतन करने की विधि।

जब आप ऐसा करते हैं, तो पहले क्वेरी दस्तावेज़ से किसी भी चयन मानदंड को हटा दें (जो यह निर्दिष्ट करता है कि कौन सा दस्तावेज़/अद्यतन करना है)। दूसरे शब्दों में, update() . के पहले तर्क के रूप में एक खाली दस्तावेज़ का उपयोग करें (या updateMany() ) विधि।

उदाहरण:

db.products.update( 
  { }, 
  { $pull: { sizes: "XL" } },
  { multi: true }
)

आउटपुट:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

इस मामले में, हम देख सकते हैं कि तीन दस्तावेज़ मेल खाते हैं (क्योंकि संग्रह में तीन दस्तावेज़ हैं), लेकिन केवल दो को संशोधित किया गया था (क्योंकि केवल दो का मान XL था। sizes . में सरणी)।

और संग्रह की दोबारा जांच करें:

db.products.find()

परिणाम:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

हम देख सकते हैं कि XL . के सभी उदाहरण संग्रह के सभी दस्तावेज़ों से हटा दिया गया है।

दस्तावेज़ों की सरणी

यदि आपके पास ऐसे सरणी हैं जिनमें दस्तावेज़ उनके तत्वों के रूप में हैं, तो आप दस्तावेज़ के भीतर डेटा से मेल खाने वाले मानदंड निर्दिष्ट करके उन दस्तावेज़ों में से किसी को भी हटा सकते हैं।

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

{
	"_id" : 1,
	"name" : "The Rat",
	"reviews" : [
		{
			"name" : "Stanley",
			"date" : "04 December, 2020",
			"ordered" : "Dinner",
			"rating" : 1
		},
		{
			"name" : "Tom",
			"date" : "04 October, 2020",
			"ordered" : "Lunch",
			"rating" : 2
		}
	]
}
{
	"_id" : 2,
	"name" : "Yum Palace",
	"reviews" : [
		{
			"name" : "Stacey",
			"date" : "08 December, 2020",
			"ordered" : "Lunch",
			"rating" : 3
		},
		{
			"name" : "Tom",
			"date" : "08 October, 2020",
			"ordered" : "Breakfast",
			"rating" : 4
		}
	]
}
{
	"_id" : 3,
	"name" : "Boardwalk Cafe",
	"reviews" : [
		{
			"name" : "Steve",
			"date" : "20 December, 2020",
			"ordered" : "Breakfast",
			"rating" : 5
		},
		{
			"name" : "Lisa",
			"date" : "25 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		},
		{
			"name" : "Kim",
			"date" : "21 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		}
	]
}

इस मामले में, reviews . नामक फ़ील्ड दस्तावेजों की एक सरणी शामिल है। प्रत्येक दस्तावेज़ विचाराधीन रेस्तरां की एक अलग समीक्षा है।

हम $pull . का उपयोग कर सकते हैं एक निश्चित मानदंड से मेल खाने वाली समीक्षाओं को हटाने के लिए।

उदाहरण:

db.restaurants.update(
  { },
  { $pull: { reviews: { rating: { $lt: 4 } } } },
  { multi: true }
)

आउटपुट:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

यह संदेश हमें बताता है कि तीन दस्तावेज़ क्वेरी मानदंड से मेल खाते हैं (क्योंकि हमने सभी दस्तावेज़ों का चयन किया है), और दो दस्तावेज़ संशोधित किए गए थे (क्योंकि दो हमारे $pull से मेल खाते थे। मानदंड)।

आइए प्रभाव देखने के लिए संग्रह को फिर से देखें:

db.restaurants.find().pretty()

परिणाम:

{ "_id" : 1, "name" : "The Rat", "reviews" : [ ] }
{
	"_id" : 2,
	"name" : "Yum Palace",
	"reviews" : [
		{
			"name" : "Tom",
			"date" : "08 October, 2020",
			"ordered" : "Breakfast",
			"rating" : 4
		}
	]
}
{
	"_id" : 3,
	"name" : "Boardwalk Cafe",
	"reviews" : [
		{
			"name" : "Steve",
			"date" : "20 December, 2020",
			"ordered" : "Breakfast",
			"rating" : 5
		},
		{
			"name" : "Lisa",
			"date" : "25 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		},
		{
			"name" : "Kim",
			"date" : "21 October, 2020",
			"ordered" : "Dinner",
			"rating" : 5
		}
	]
}

हम देख सकते हैं कि केवल 4 और उससे अधिक रेटिंग वाली समीक्षाएं ही शेष हैं। 4 से कम की सभी समीक्षाओं को हटा दिया गया है।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB नेस्टेड सरणी क्वेरी

  2. स्पार्क, पायथन और मोंगोडीबी को एक साथ काम करने के लिए प्राप्त करना

  3. MongoDB में केस-असंवेदनशील इंडेक्स कैसे बनाएं?

  4. क्या मैं इसे छोड़ने के बिना मोंगोडीबी में मौजूदा इंडेक्स को संशोधित कर सकता हूं?

  5. मोंगो में लेनदेन में रोलबैक कैसे प्राप्त करें?