MongoDB में, $slice एकत्रीकरण पाइपलाइन ऑपरेटर एक सरणी का सबसेट देता है।
$slice का उपयोग करने के लिए , आप सरणी से लौटने के लिए तत्वों की संख्या निर्दिष्ट करते हैं। आप एक प्रारंभिक स्थिति भी निर्दिष्ट कर सकते हैं जिसके लिए सरणी से सबसेट लेना है।
उदाहरण
मान लीजिए हमारे पास test . नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : 1, "data" : [ "Aardvark", "Buffalo", "Cat", "Dog", "Horse", "Gorilla", "Zebra" ] }
हम $slice . का उपयोग कर सकते हैं data में सरणी से एक सबसेट लेने के लिए फ़ील्ड.
सकारात्मक पूर्णांक
एकल सकारात्मक मान प्रदान करना सरणी की शुरुआत से प्रारंभिक स्थिति निर्धारित करता है।
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", 3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Aardvark", "Buffalo", "Cat" ] }
इस मामले में, हमने 3 . की एक सकारात्मक संख्या प्रदान की है , और इसलिए पहले तीन तत्व जहां सरणी से लौटे हैं।
नकारात्मक पूर्णांक
एकल ऋणात्मक मान प्रदान करना अंत . से आरंभिक स्थिति निर्धारित करता है सरणी का।
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", -3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Horse", "Gorilla", "Zebra" ] } इस मामले में हमने सरणी से अंतिम तीन तत्व लौटाए हैं।
ध्यान दें कि जब आप एक प्रारंभिक स्थिति भी निर्दिष्ट करते हैं तो आप एक ऋणात्मक पूर्णांक निर्दिष्ट नहीं कर सकते। इस पर बाद में।
प्रारंभिक स्थिति निर्दिष्ट करें
आपके पास प्रारंभिक स्थिति निर्दिष्ट करने का विकल्प भी है। ऐसा करने के लिए, दूसरे पूर्णांक से पहले एक और पूर्णांक प्रदान करें।
सकारात्मक पूर्णांक
आरंभिक स्थिति के लिए धनात्मक पूर्णांक का उपयोग करने का एक उदाहरण यहां दिया गया है:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", 2, 3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Cat", "Dog", "Horse" ] }
इस मामले में हमने 2 . की प्रारंभिक स्थिति निर्दिष्ट की है और 3 . का एक टुकड़ा आकार ।
ध्यान दें कि सरणियाँ शून्य-आधारित हैं, और इसलिए हमारा सकारात्मक पूर्णांक 2 . है परिणामस्वरूप स्लाइस ऑपरेशन तीसरे स्थान से शुरू हो रहा है।
नकारात्मक पूर्णांक
आरंभिक स्थिति के लिए ऋणात्मक पूर्णांक का उपयोग करने का एक उदाहरण यहां दिया गया है:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", -4, 3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Dog", "Horse", "Gorilla" ] }
इस मामले में, हमने -4 . निर्दिष्ट किया है , जिसके परिणामस्वरूप स्लाइस ऑपरेशन अंत से चार स्थान पीछे गिनता है।
बड़े आकार के स्लाइस
सरणी में उपलब्ध तत्वों से बड़ा टुकड़ा आकार प्रदान करने से केवल शेष सरणी तत्व वापस आ जाते हैं।
उदाहरण:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", -1, 3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Zebra" ] } यहां हमने निर्दिष्ट किया है कि तीन तत्वों को वापस किया जाना चाहिए, भले ही हमने सरणी के अंत से केवल एक स्थिति वापस शुरू की हो। इस मामले में, केवल एक तत्व लौटाया गया था (सरणी में अंतिम वाला)।
प्रारंभिक स्थिति सीमा से बाहर
एक प्रारंभिक स्थिति प्रदान करना जो सरणी की सीमा से बाहर है, कुछ तत्व या एक खाली सरणी लौटा सकता है। यह सब प्रदान किए जा रहे मूल्यों पर निर्भर करता है।
यहां एक उदाहरण दिया गया है जो एक खाली सरणी देता है:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", 10, 3 ] }
}
}
]
) परिणाम:
{ "result" : [ ] }
यह एक खाली सरणी लौटाता है क्योंकि प्रारंभिक स्थिति 10 . थी , भले ही केवल 7 . ही हों सरणी में तत्व (और गिनती 0 . से जाएगी करने के लिए 6 )।
हालांकि, अगर हम एक नकारात्मक मान प्रदान करते हैं जो सरणी आकार से बड़ा है, तो टुकड़ा सरणी की शुरुआत से शुरू होता है।
उदाहरण:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", -10, 3 ] }
}
}
]
) परिणाम:
{ "result" : [ "Aardvark", "Buffalo", "Cat" ] } शुरुआती स्थिति के साथ नेगेटिव स्लाइस
जैसा कि उल्लेख किया गया है, जब आप एक प्रारंभिक स्थिति भी निर्दिष्ट करते हैं, तो आप एक ऋणात्मक पूर्णांक निर्दिष्ट नहीं कर सकते। ऐसा करने से त्रुटि होती है।
उदाहरण:
db.test.aggregate(
[
{
$project:
{
_id: 0,
result: { $slice: [ "$data", 4, -3 ] }
}
}
]
) परिणाम:
Error: command failed: {
"ok" : 0,
"errmsg" : "Third argument to $slice must be positive: -3",
"code" : 28729,
"codeName" : "Location28729"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:639:17
example@sqldat.com/mongo/shell/assert.js:729:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1058:12
@(shell):1:1