MongoDB, $strLenCP
एग्रीगेशन पाइपलाइन ऑपरेटर निर्दिष्ट स्ट्रिंग में UTF-8 कोड बिंदुओं की संख्या लौटाता है।
$strLenCP
ऑपरेटर $strLenBytes
. से अलग है ऑपरेटर, जो स्ट्रिंग में बाइट्स की संख्या देता है।
उदाहरण
मान लीजिए हमारे पास english
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "Maimuang" } { "_id" : 2, "data" : "M" } { "_id" : 3, "data" : "a" } { "_id" : 4, "data" : "i" } { "_id" : 5, "data" : "m" } { "_id" : 6, "data" : "u" } { "_id" : 7, "data" : "a" } { "_id" : 8, "data" : "n" } { "_id" : 9, "data" : "g" }
हम $strLenCP
apply लागू कर सकते हैं उन दस्तावेज़ों में डेटा फ़ील्ड में:
db.english.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
{ "data" : "Maimuang", "result" : 8 } { "data" : "M", "result" : 1 } { "data" : "a", "result" : 1 } { "data" : "i", "result" : 1 } { "data" : "m", "result" : 1 } { "data" : "u", "result" : 1 } { "data" : "a", "result" : 1 } { "data" : "n", "result" : 1 } { "data" : "g", "result" : 1 }
हम देख सकते हैं कि पूरा शब्द 8 कोड बिंदुओं का उपयोग करता है और प्रत्येक वर्ण एक कोड बिंदु का उपयोग करता है।
थाई वर्ण
यहां एक उदाहरण दिया गया है जो थाई वर्णों का उपयोग करता है, जो प्रत्येक 3 बाइट्स हैं, लेकिन केवल एक कोड बिंदु का उपयोग करते हैं।
हमारे पास thai
. नाम का एक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "ไม้เมือง" } { "_id" : 2, "data" : "ไ" } { "_id" : 3, "data" : "ม้" } { "_id" : 4, "data" : "เ" } { "_id" : 5, "data" : "มื" } { "_id" : 6, "data" : "อ" } { "_id" : 7, "data" : "ง" }
और यहां बताया गया है कि जब हम $strLenCP
. लागू करते हैं तो क्या होता है उन दस्तावेज़ों के लिए:
db.thai.aggregate( [ { $project: { _id: 0, data: 1, result: { $strLenCP: "$data" } } } ] )
परिणाम:
{ "data" : "ไม้เมือง", "result" : 8 } { "data" : "ไ", "result" : 1 } { "data" : "ม้", "result" : 2 } { "data" : "เ", "result" : 1 } { "data" : "มื", "result" : 2 } { "data" : "อ", "result" : 1 } { "data" : "ง", "result" : 1 }
इनमें से दो वर्णों को विशेषक का उपयोग करके संशोधित किया गया है, जिसके परिणामस्वरूप 2 कोड अंक लौटाए जा रहे हैं। $strLenBytes
. का उपयोग करते समय ये वर्ण 6 बाइट लौटाते हैं ऑपरेटर।
अन्य वर्ण
मान लीजिए हमारे पास other
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "é" } { "_id" : 2, "data" : "©" } { "_id" : 3, "data" : "℘" }
और चलिए $strLenCP
apply लागू करते हैं उन दस्तावेज़ों के लिए:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
{ "data" : "é", "result" : 1 } { "data" : "©", "result" : 1 } { "data" : "℘", "result" : 1 }
इनमें से प्रत्येक वर्ण एकल कोड बिंदु का उपयोग करता है (भले ही ऐसे वर्ण एक से अधिक बाइट का उपयोग करते हों)।
स्पेस कैरेक्टर एक कोड पॉइंट का उपयोग करता है। इसलिए दो स्थान वर्ण 2 कोड बिंदुओं का उपयोग करते हैं, और इसी तरह।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज हैं:
{ "_id" : 4, "data" : " " } { "_id" : 5, "data" : " " }
और हम $strLenCP
. लागू करते हैं उन दस्तावेज़ों के लिए:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
{ "data" : " ", "result" : 1 } { "data" : " ", "result" : 2 }
खाली स्ट्रिंग्स
खाली तार 0
लौटाते हैं ।
यहाँ एक खाली स्ट्रिंग वाला दस्तावेज़ है:
{ "_id" : 6, "data" : "" }
और यहां बताया गया है कि जब हम $strLenCP
. लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
{ "data" : "", "result" : 0 }
गलत डेटा प्रकार
गलत डेटा प्रकार पास करने से त्रुटि होती है।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 7, "data" : 123 }
डेटा field
एक नंबर होता है।
आइए लागू करें $strLenCP
उस दस्तावेज़ के लिए:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "$strLenCP requires a string argument, found: double", "code" : 34471, "codeName" : "Location34471" } : 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
शून्य मान
null
प्रदान करना इसके परिणामस्वरूप त्रुटि भी होती है।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 8, "data" : null }
डेटा field
इसमें null
शामिल है ।
आइए लागू करें $strLenCP
उस दस्तावेज़ के लिए:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
Error: command failed: { "ok" : 0, "errmsg" : "$strLenCP requires a string argument, found: null", "code" : 34471, "codeName" : "Location34471" } : 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
अनुपलब्ध फ़ील्ड
त्रुटियों को उत्पन्न करने के विषय के साथ जारी रखना, एक गैर-मौजूद फ़ील्ड निर्दिष्ट करना भी एक त्रुटि उत्पन्न करता है।
दस्तावेज़:
{ "_id" : 9 }
लागू करें $strLenCP
:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 9 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
परिणाम:
Error: command failed: { "ok" : 0, "errmsg" : "$strLenCP requires a string argument, found: missing", "code" : 34471, "codeName" : "Location34471" } : 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