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

MongoDB में $strLenBytes बनाम $strLenCP:क्या अंतर है?

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 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MapReduce परिणाम 100 तक सीमित लगते हैं?

  2. $ मौजूद ऑपरेटर के साथ फ़ील्ड के अस्तित्व की जांच करते समय मोंगोडीबी इंडेक्स का उपयोग कर सकता है?

  3. SQL में अधिकतम मान वाली पंक्ति का चयन करने के 3 तरीके

  4. क्लस्टर नियंत्रण प्रदर्शन और स्वास्थ्य निगरानी

  5. rmongodb:$ या क्वेरी में उपयोग करना