MongoDB में, $indexOfCP
एकत्रीकरण पाइपलाइन ऑपरेटर एक सबस्ट्रिंग की घटना के लिए एक स्ट्रिंग की खोज करता है और पहली घटना का यूटीएफ कोड बिंदु सूचकांक देता है।
UTF कोड पॉइंट इंडेक्स शून्य-आधारित है (यानी यह 0
. से शुरू होता है) )।
सिंटैक्स
वाक्य रचना इस प्रकार है:
{ $indexOfCP: [ <string expression>, <substring expression>, <start>, <end> ] }
कहां:
<string expression>
खोजने के लिए स्ट्रिंग है।<substring expression>
वह सबस्ट्रिंग है जिसे आप स्ट्रिंग में खोजना चाहते हैं।-
<start>
एक वैकल्पिक तर्क है जो खोज के लिए प्रारंभिक अनुक्रमणिका स्थिति निर्दिष्ट करता है। कोई भी मान्य व्यंजक हो सकता है जो एक गैर-ऋणात्मक पूर्णांक संख्या का समाधान करता हो। <end>
एक वैकल्पिक तर्क है जो खोज के लिए अंतिम अनुक्रमणिका स्थिति निर्दिष्ट करता है। कोई भी मान्य व्यंजक हो सकता है जो एक गैर-ऋणात्मक पूर्णांक संख्या का समाधान करता हो।
यदि निर्दिष्ट मान नहीं मिलता है, तो $indexOfCP
रिटर्न -1
।
यदि निर्दिष्ट मान के कई उदाहरण हैं, तो केवल पहला लौटाया जाता है।
उदाहरण
मान लीजिए हमारे पास test
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : "c 2021" } { "_id" : 2, "data" : "© 2021" } { "_id" : 3, "data" : "ไม้เมือง" }
यहां $indexOfCP
applying लागू करने का एक उदाहरण दिया गया है उन दस्तावेज़ों के लिए:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "2021" ] }
}
}
]
)
परिणाम:
{ "data" : "c 2021", "result" : 2 } { "data" : "© 2021", "result" : 2 } { "data" : "ไม้เมือง", "result" : -1 }
पहले दो दस्तावेज़ों में, सबस्ट्रिंग UTF कोड बिंदु अनुक्रमणिका स्थिति 2
. पर पाई गई थी . दिया गया $indexOfCP
परिणाम शून्य-आधारित होते हैं (सूचकांक 0
. से शुरू होता है ) स्थिति 2 तीसरे कोड बिंदु का प्रतिनिधित्व करती है।
यदि हम $indexOfBytes
. का उपयोग करते हैं तो हमें जो प्राप्त होगा, यह उससे भिन्न परिणाम है , क्योंकि कॉपीराइट प्रतीक (©
) दूसरे दस्तावेज़ में 2 बाइट्स लगते हैं। लेकिन यह केवल एक कोड बिंदु का उपयोग करता है, जो अक्षर c
. के समान है उपयोग करता है।
तीसरे दस्तावेज़ के संबंध में, सबस्ट्रिंग बिल्कुल नहीं मिला, और इसलिए परिणाम -1
. है ।
यहां एक और उदाहरण दिया गया है, इस समय को छोड़कर हम थाई वर्ण की खोज करते हैं:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "เ" ] }
}
}
]
)
परिणाम:
{ "data" : "c 2021", "result" : -1 } { "data" : "© 2021", "result" : -1 } { "data" : "ไม้เมือง", "result" : 3 }
इस मामले में, हमने तीसरे दस्तावेज़ में एक वर्ण की खोज की, और इसका UTF-8 कोड बिंदु अनुक्रमणिका 3
के रूप में वापस आता है . दिया गया $indexOfCP
परिणाम शून्य आधारित हैं, इसका मतलब है कि यह चौथा कोड बिंदु है।
ऐसा इसलिए है क्योंकि दूसरे वर्ण में एक विशेषक चिह्न है, जो एक कोड बिंदु भी है। इसलिए, पहला वर्ण एक कोड बिंदु है और दूसरा वर्ण दो कोड बिंदु (विशेषक सहित) है, जो तीन के बराबर है। इसका मतलब है कि हमारा चरित्र चौथे स्थान से शुरू होता है (जो कि कोड बिंदु संख्या 3
. है) , 0
. से शुरू होने वाली अनुक्रमणिका गणना के कारण )।
MongoDB देखें $strLenCP
एक उदाहरण के लिए जो इस विशेष स्ट्रिंग में प्रत्येक वर्ण के लिए कोड बिंदुओं की संख्या देता है। और देखें MongoDB $strLenBytes
एक ही स्ट्रिंग में बाइट्स की संख्या देखने के लिए।
प्रारंभिक स्थिति निर्दिष्ट करें
आप खोज के लिए प्रारंभिक अनुक्रमणिका स्थिति निर्दिष्ट करने के लिए तीसरा तर्क प्रदान कर सकते हैं।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 4, "data" : "ABC XYZ ABC" }
यहां $indexOfCP
applying लागू करने का एक उदाहरण दिया गया है प्रारंभिक स्थिति के साथ:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 4 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "ABC", 1 ] }
}
}
]
)
परिणाम:
{ "data" : "ABC XYZ ABC", "result" : 8 }
इस मामले में, सबस्ट्रिंग का दूसरा उदाहरण वापस कर दिया गया था। ऐसा इसलिए है क्योंकि हमने 1
. स्थिति पर खोज शुरू की है , और सबस्ट्रिंग का पहला उदाहरण स्थिति 0
. से शुरू होता है (खोज के लिए प्रारंभिक स्थिति से पहले)।
यदि प्रारंभ स्थिति स्ट्रिंग से बड़ी या अंतिम स्थिति से बड़ी संख्या है, तो $indexOfCP
रिटर्न -1
।
अगर यह एक ऋणात्मक संख्या है, तो $indexOfCP
एक त्रुटि देता है।
एक समाप्ति स्थिति निर्दिष्ट करें
आप खोज के लिए अंतिम अनुक्रमणिका स्थिति निर्दिष्ट करने के लिए चौथा तर्क भी प्रदान कर सकते हैं।
यदि आप यह तर्क प्रदान करते हैं, तो आपको एक प्रारंभिक स्थिति भी प्रदान करनी होगी। ऐसा करने में विफल होने पर इस तर्क को शुरुआती बिंदु के रूप में व्याख्यायित किया जाएगा।
उदाहरण:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 4 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "XYZ", 0, 3 ] }
}
}
]
)
परिणाम:
{ "data" : "ABC XYZ ABC", "result" : -1 }
परिणाम -1
. है जिसका अर्थ है कि सबस्ट्रिंग नहीं मिला। ऐसा इसलिए है क्योंकि हमने 0
. स्थान पर अपनी खोज शुरू की है और इसे 3
. स्थिति पर समाप्त किया , इसलिए सबस्ट्रिंग को कैप्चर नहीं कर रहा है।
यदि हम अंतिम अनुक्रमणिका स्थिति में वृद्धि करते हैं तो यहां क्या होता है:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 4 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "XYZ", 0, 5 ] }
}
}
]
)
परिणाम:
{ "data" : "ABC XYZ ABC", "result" : 4 }
इस बार मान शामिल किया गया और इसकी अनुक्रमणिका स्थिति वापस आ गई।
यदि अंतिम स्थिति प्रारंभिक स्थिति से एक संख्या कम है, $indexOfCP
रिटर्न -1
।
अगर यह एक ऋणात्मक संख्या है, तो $indexOfCP
एक त्रुटि देता है।
अनुपलब्ध फ़ील्ड
यदि फ़ील्ड दस्तावेज़ में नहीं है, $indexOfCP
रिटर्न null
।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 5 }
यहां बताया गया है कि जब हम $indexOfCP
. लागू करते हैं तो क्या होता है :
db.test.aggregate(
[
{ $match: { _id: { $in: [ 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "XYZ" ] }
}
}
]
)
परिणाम:
{ "result" : null }
शून्य मान
यदि पहला तर्क null
है , $indexOfCP
रिटर्न null
।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 6, "data" : null }
यहां बताया गया है कि जब हम $indexOfCP
. लागू करते हैं तो क्या होता है :
db.test.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "XYZ" ] }
}
}
]
)
परिणाम:
{ "data" : null, "result" : null }
हालांकि, जब दूसरा तर्क (यानी सबस्ट्रिंग) null
. है , एक त्रुटि वापस आ जाती है:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", null ] }
}
}
]
)
परिणाम:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "$indexOfCP requires a string as the second argument, found: null", "code" : 40094, "codeName" : "Location40094" } : 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
गलत डेटा प्रकार
यदि पहला तर्क गलत डेटा प्रकार है (यानी यह एक स्ट्रिंग को हल नहीं करता है), $indexOfCP
एक त्रुटि देता है।
मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:
{ "_id" : 7, "data" : 123 }
यहां बताया गया है कि जब हम $indexOfCP
. लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $indexOfCP: [ "$data", "XYZ" ] }
}
}
]
)
परिणाम:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "$indexOfCP requires a string as the first argument, found: double", "code" : 40093, "codeName" : "Location40093" } : 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
जैसा कि त्रुटि संदेश बताता है, $indexOfCP requires a string as the first argument
।