$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}
])
नेस्टेड सरणियों में क्रम में दूसरा तत्व कौन सा प्रोजेक्ट करता है।