$slice . प्राप्त करने के लिए आपको एकत्रीकरण पाइपलाइन का उपयोग करने की आवश्यकता है चेन, प्रोजेक्ट स्टेटमेंट की सीमाओं के कारण खोज क्वेरी का हिस्सा है।
नीचे दी गई क्वेरी अमान्य है क्योंकि पहला $slice एक अनुक्रमणिका के बजाय एक सरणी लौटाएगा, और बाहरी दायरे का निष्पादन $slice विफल रहता है।
db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})
इसके अलावा एक ही प्रोजेक्ट स्टेटमेंट में प्रोजेक्टेड फील्ड पर काम करने का कोई तरीका नहीं है, यदि संभव हो तो हम टेक्स्ट को $स्लाइस लगाकर और संशोधित कर सकते थे।
जाने का रास्ता होगा:
Matchफू नाम के साथ रिकॉर्ड।Unwindप्रथम स्तर तक पहुंचने के लिए टेक्स्ट सरणी।Unwindफिर से उस स्तर तक पहुंचने के लिए जो हम चाहते हैं।Groupनाम से एक साथ रिकॉर्ड।Projectसमूह में अंतिम रिकॉर्ड जो अंतिम नेस्टेड सरणी का अंतिम तत्व भी है।
कोड:
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])
या यदि आप किसी विशेष क्रम में प्रदर्शित होने वाले तत्व को प्रोजेक्ट करना चाहते हैं, तो आप $skip का उपयोग कर सकते हैं और $limit इसे प्राप्त करने के लिए संचालन।
var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])
नेस्टेड सरणियों में क्रम में दूसरा तत्व कौन सा प्रोजेक्ट करता है।