MongoDB में $strLenBytes
. शामिल है और $strLenCP
इसके एकत्रीकरण पाइपलाइन ढांचे में ऑपरेटरों। ये ऑपरेटर एक समान लेकिन थोड़ा अलग काम करते हैं। कुछ मामलों में, दोनों बिल्कुल समान परिणाम देंगे, जबकि अन्य मामलों में परिणाम भिन्न होंगे।
इन दो ऑपरेटरों के बीच अंतर का एक त्वरित अवलोकन यहां दिया गया है।
अंतर
यहां प्रत्येक ऑपरेटर की परिभाषा दी गई है:
$strLenBytes
UTF-8 एन्कोडेड बाइट्स की संख्या लौटाता है निर्दिष्ट स्ट्रिंग में$strLenCP
UTF-8 कोड अंक की संख्या लौटाता है निर्दिष्ट स्ट्रिंग में।
बोल्ड टाइप में अंतर देखें। एक नंबर देता है बाइट्स , दूसरा कोड अंक . की संख्या देता है ।
अंग्रेजी में स्ट्रिंग्स के साथ काम करते समय, बाइट्स की संख्या आमतौर पर कोड बिंदुओं की संख्या के समान होगी। प्रत्येक कोड बिंदु एक बाइट का उपयोग करेगा।
लेकिन जब अन्य भाषाओं के साथ काम करते हैं जो एक अलग यूनिकोड ब्लॉक का उपयोग करते हैं, तो आप पा सकते हैं कि बाइट्स की संख्या दो या तीन बाइट्स तक बढ़ जाती है। यह अन्य यूनिकोड कोड बिंदुओं जैसे कि प्रतीकों, इमोजी, आदि के साथ काम करते समय भी सच है। कुछ मामलों में एक एकल वर्ण 4 बाइट्स का उपयोग कर सकता है।
उदाहरण
मान लीजिए हमारे पास unicode
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "é" } { "_id" : 2, "data" : "©" } { "_id" : 3, "data" : "℘" }
और अब दोनों $strLenBytes
. को लागू करते हैं और $strLenCP
डेटा फ़ील्ड के लिए:
db.unicode.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
strLenCP: { $strLenCP: "$data" },
strLenBytes: { $strLenBytes: "$data" }
}
}
]
)
परिणाम:
{ "data" : "é", "strLenCP" : 1, "strLenBytes" : 2 } { "data" : "©", "strLenCP" : 1, "strLenBytes" : 2 } { "data" : "℘", "strLenCP" : 1, "strLenBytes" : 3 }
हम देख सकते हैं कि सभी वर्ण केवल एक कोड बिंदु का उपयोग करते हैं, लेकिन पहला दस्तावेज़ दो बाइट्स का उपयोग करता है और अन्य दो दस्तावेज़ प्रत्येक तीन बाइट्स का उपयोग करते हैं।
अंग्रेज़ी वर्ण
मान लीजिए हमारे पास english
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "Fast dog" } { "_id" : 2, "data" : "F" } { "_id" : 3, "data" : "a" } { "_id" : 4, "data" : "s" } { "_id" : 5, "data" : "t" } { "_id" : 6, "data" : " " } { "_id" : 7, "data" : "d" } { "_id" : 8, "data" : "o" } { "_id" : 9, "data" : "g" }
और अब दोनों $strLenBytes
. को लागू करते हैं और $strLenCP
डेटा फ़ील्ड के लिए:
db.english.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
strLenCP: { $strLenCP: "$data" },
strLenBytes: { $strLenBytes: "$data" }
}
}
]
)
परिणाम:
{ "data" : "Fast dog", "strLenCP" : 8, "strLenBytes" : 8 } { "data" : "F", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "a", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "s", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "t", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : " ", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "d", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "o", "strLenCP" : 1, "strLenBytes" : 1 } { "data" : "g", "strLenCP" : 1, "strLenBytes" : 1 }
इस मामले में, सभी वर्ण एक कोड बिंदु और प्रत्येक में एक बाइट का उपयोग करते हैं।
थाई वर्ण
यहां एक उदाहरण दिया गया है जो थाई वर्णों का उपयोग करके प्रदर्शित करता है कि सभी भाषाएं एक बाइट प्रति कोड बिंदु का उपयोग नहीं करती हैं।
मान लीजिए हमारे पास thai
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "ไม้เมือง" } { "_id" : 2, "data" : "ไ" } { "_id" : 3, "data" : "ม้" } { "_id" : 4, "data" : "เ" } { "_id" : 5, "data" : "มื" } { "_id" : 6, "data" : "อ" } { "_id" : 7, "data" : "ง" }
यहां बताया गया है कि जब हम $strLenBytes
. दोनों को लागू करते हैं तो क्या होता है और $strLenCP
डेटा फ़ील्ड के लिए:
db.thai.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
strLenCP: { $strLenCP: "$data" },
strLenBytes: { $strLenBytes: "$data" }
}
}
]
)
परिणाम:
{ "data" : "ไม้เมือง", "strLenCP" : 8, "strLenBytes" : 24 } { "data" : "ไ", "strLenCP" : 1, "strLenBytes" : 3 } { "data" : "ม้", "strLenCP" : 2, "strLenBytes" : 6 } { "data" : "เ", "strLenCP" : 1, "strLenBytes" : 3 } { "data" : "มื", "strLenCP" : 2, "strLenBytes" : 6 } { "data" : "อ", "strLenCP" : 1, "strLenBytes" : 3 } { "data" : "ง", "strLenCP" : 1, "strLenBytes" : 3 }