MongoDB में, $size
एग्रीगेशन पाइपलाइन ऑपरेटर किसी ऐरे में आइटम्स की कुल संख्या गिनता है और लौटाता है।
$size
ऑपरेटर एक तर्क स्वीकार करता है। तर्क किसी भी मान्य अभिव्यक्ति हो सकता है जो किसी सरणी को हल करता है।
उदाहरण
मान लीजिए हमारे पास test
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : [ ] } { "_id" : 2, "data" : [ "a" ] } { "_id" : 3, "data" : [ "a", "b" ] } { "_id" : 4, "data" : [ "a", "b", "c" ] } { "_id" : 5, "data" : [ 1, 1, 1, 1 ] }
हम $size
. का उपयोग कर सकते हैं संबंधित data
में सरणियों में आइटम्स की संख्या वापस करने के लिए फ़ील्ड।
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
परिणाम:
{ "data" : [ ], "result" : 0 } { "data" : [ "a" ], "result" : 1 } { "data" : [ "a", "b" ], "result" : 2 } { "data" : [ "a", "b", "c" ], "result" : 3 } { "data" : [ 1, 1, 1, 1 ], "result" : 4 }
नेस्टेड सरणी
$size
ऑपरेटर नेस्टेड सरणियों में नहीं उतरता है और उनके तत्वों की गणना करता है। यह शीर्ष स्तर से सरणी का मूल्यांकन करता है।
मान लीजिए कि हमारे संग्रह में निम्नलिखित दस्तावेज़ हैं:
{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }
और हम $size
. लागू करते हैं उसके लिए:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
परिणाम:
{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }
नेस्टेड सरणी को एक तत्व के रूप में गिना जाता है (चाहे उसमें कितने भी तत्व हों)।
गलत डेटा प्रकार
तर्क कोई भी मान्य व्यंजक हो सकता है, जब तक कि वह किसी सरणी में हल हो जाता है। यदि यह किसी सरणी का समाधान नहीं करता है, तो एक त्रुटि उत्पन्न होती है।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 7, "data" : 3 }
data
फ़ील्ड किसी सरणी को हल नहीं करता है।
यहां बताया गया है कि जब हम $size
. लागू करते हैं तो क्या होता है उस क्षेत्र के लिए:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
परिणाम:
Error: command failed: { "ok" : 0, "errmsg" : "The argument to $size must be an array, but was of type: double", "code" : 17124, "codeName" : "Location17124" } : 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
त्रुटि संदेश हमें बताता है कि The argument to $size must be an array, but was of type: double
।
अनुपलब्ध फ़ील्ड
यदि दस्तावेज़ में फ़ील्ड मौजूद नहीं है, तो एक त्रुटि वापस आ जाती है।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 8 }
और हम $size
. लागू करते हैं उस दस्तावेज़ के लिए:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $size: [ "$data" ] }
}
}
]
)
परिणाम:
Error: command failed: { "ok" : 0, "errmsg" : "The argument to $size must be an array, but was of type: missing", "code" : 17124, "codeName" : "Location17124" } : 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