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

मोंगोडीबी $arrayToObject

MongoDB में, $arrayToObject एकत्रीकरण पाइपलाइन ऑपरेटर एक सरणी को एक दस्तावेज़ में परिवर्तित करता है।

$arrayToObject . को प्रदान की गई सरणी निम्नलिखित दो प्रारूपों में से एक में होना चाहिए:

  • दो-तत्व सरणियों की एक सरणी जहां पहला तत्व फ़ील्ड नाम है, और दूसरा तत्व फ़ील्ड मान है।
  • दस्तावेज़ों की एक सरणी जिसमें k होता है फ़ील्ड और एक v फ़ील्ड, जहाँ k फ़ील्ड में फ़ील्ड का नाम और v . होता है फ़ील्ड में मान होता है।

प्रारूप 1

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

{
	"_id" : 1,
	"data" : [
		[
			"name",
			"Fetch"
		],
		[
			"type",
			"Dog"
		]
	]
}

हम $arrayToObject . का उपयोग कर सकते हैं data लौटाने के लिए ऑपरेटर दस्तावेज़ ऑब्जेक्ट के रूप में फ़ील्ड:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

{ "result" : { "name" : "Fetch", "type" : "Dog" } }

फ़ॉर्मैट 2

मान लीजिए हमारे पास इस तरह का एक दस्तावेज़ है:

{
	"_id" : 2,
	"data" : [
		{
			"k" : "name",
			"v" : "Fetch"
		},
		{
			"k" : "type",
			"v" : "Dog"
		}
	]
}

इस मामले में, k फ़ील्ड में कुंजियाँ और v होते हैं फ़ील्ड में मान होते हैं।

यहां बताया गया है कि जब हम $arrayToObject apply लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 2 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

{ "result" : { "name" : "Fetch", "type" : "Dog" } }

हम देख सकते हैं कि इसका परिणाम वही दस्तावेज़ है जो पिछले उदाहरण में प्रस्तुत किया गया था।

गैर-अनुरूप सरणी

$arrayToObject . को दिया गया तर्क कोई भी मान्य व्यंजक तब तक हो सकता है जब तक कि वह दो-तत्वों वाली सरणियों की एक सरणी या दस्तावेज़ों की सरणी में हल हो जाता है जिसमें k होता है और v फ़ील्ड।

यदि तर्क इसका पालन नहीं करता है, तो एक त्रुटि उत्पन्न होती है।

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

{ "_id" : 3, "data" : [ [ "name", "Fetch", "Dog" ] ] }

इस सरणी में तीन तत्व हैं।

यहां बताया गया है कि जब हम $arrayToObject apply लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 3 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$arrayToObject requires an array of size 2 arrays,found array of size: 3",
	"code" : 40397,
	"codeName" : "Location40397"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

जैसा कि त्रुटि बताती है, $arrayToObject requires an array of size 2 arrays

यहां एक और दस्तावेज़ है जिसमें एक गैर-अनुरूप सरणी है:

{ "_id" : 4, "data" : [ { "a" : "name", "b" : "Fetch" } ] }

इस मामले में, सरणी के भीतर दस्तावेज़ a . का उपयोग करता है और b k . के बजाय फ़ील्ड और v

यहां बताया गया है कि जब हम $arrayToObject apply लागू करते हैं तो क्या होता है :

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 4 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$arrayToObject requires an object with keys 'k' and 'v'. Missing either or both keys from: {a: \"name\", b: \"Fetch\"}",
	"code" : 40393,
	"codeName" : "Location40393"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

इस मामले में, त्रुटि बताती है कि $arrayToObject requires an object with keys 'k' and 'v'

गलत प्रकार

इसी तरह, यदि तर्क एक सरणी भी नहीं है, तो एक त्रुटि उत्पन्न होती है।

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

{ "_id" : 5, "data" : "None" }

data फ़ील्ड में एक स्ट्रिंग है।

यहां बताया गया है कि जब हम $arrayToObject apply लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 5 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$arrayToObject requires an array input, found: string",
	"code" : 40386,
	"codeName" : "Location40386"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

जैसा कि त्रुटि बताती है, $arrayToObject requires an array input

शून्य मान

null प्रदान करना परिणाम null

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

{ "_id" : 6, "data" : null }

और हम $arrayToObject . लागू करते हैं :

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

{ "result" : null }

अनुपलब्ध फ़ील्ड

यदि फ़ील्ड अनुपलब्ध है, तो परिणाम null है ।

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

{ "_id" : 7 }

और हम $arrayToObject . लागू करते हैं :

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     { $project: { 
        _id: 0,
        result: { $arrayToObject: "$data" } } 
         }
   ]
)

परिणाम:

{ "result" : null }

फ़ील्ड नाम दोहराना

MongoDB दस्तावेज़ीकरण के अनुसार, यदि किसी फ़ील्ड का नाम सरणी में दोहराता है:

  • 4.0.5 से शुरू, $arrayToObject उस फ़ील्ड के लिए अंतिम मान का उपयोग करता है। 4.0.0-4.0.4 के लिए, उपयोग किया गया मान ड्राइवर पर निर्भर करता है।
  • 3.6.10 से शुरू, $arrayToObject उस फ़ील्ड के लिए अंतिम मान का उपयोग करता है। 3.6.0-3.6.9 के लिए, उपयोग किया गया मान ड्राइवर पर निर्भर करता है।
  • 3.4.19 से शुरू, $arrayToObject उस फ़ील्ड के लिए अंतिम मान का उपयोग करता है। 3.4.0-3.4.19 के लिए, मूल्य का उपयोग ड्राइवर पर निर्भर करता है।

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. उल्का उपयोग टेम्पलेट सहायक कार्यों में लाने या खोजने के लिए?

  2. मोंगोडीबी के लाभ | मोंगोडीबी के नुकसान

  3. तारीख के आधार पर वापसी क्वेरी

  4. Amazon EC2 पर MongoDB को तैनात करने के लिए 6 सर्वोत्तम अभ्यास

  5. क्या आप मोंगो में $addToSet के लिए एक कुंजी निर्दिष्ट कर सकते हैं?