आम तौर पर, केवल पाइपलाइन ऑपरेटर जिन्हें सामान्य क्वेरी ($match
. में समतल किया जा सकता है) , $limit
, $sort
, और $skip
) संग्रह पर अनुक्रमणिका का उपयोग करने में सक्षम होगा। यह $geoNear
. के कारणों में से एक है 2.4 में जोड़ा गया ऑपरेटर पाइपलाइन की शुरुआत में होना चाहिए।
एक बार जब आप $project
. के साथ दस्तावेज़ों को बदल देते हैं , $group
, या $unwind
अनुक्रमणिका अब मान्य/प्रयोग योग्य नहीं है।
यदि आपके पास किसी सरणी फ़ील्ड पर एक अनुक्रमणिका है, तो आप अभी भी इसका उपयोग $unwind
. से पहले कर सकते हैं पाइपलाइन में दस्तावेज़ों के चयन में तेजी लाने के लिए और फिर चयनित दस्तावेज़ों को दूसरे $match
. के साथ और अधिक परिष्कृत करने के लिए ।
जैसे दस्तावेज़ों पर विचार करें:
{ tags: [ 'cat', 'bird', 'blue' ] }
tags
. पर एक अनुक्रमणिका के साथ ।
यदि आप केवल b
. से शुरू होने वाले टैग को समूहीकृत करना चाहते हैं तो आप एक एकत्रीकरण कर सकते हैं जैसे:
{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
पहला $match
क्या मोटे अनाज tags
. पर अनुक्रमणिका का उपयोग करके मेल खाते हैं? .
$unwind
. के बाद दूसरा मैच इंडेक्स का उपयोग करने में सक्षम नहीं होगा (उपरोक्त दस्तावेज़ अब 3 दस्तावेज़ है) लेकिन उन दस्तावेज़ों में से प्रत्येक का मूल्यांकन कर सकते हैं जो अतिरिक्त दस्तावेज़ बनाए जाते हैं (उदाहरण से {टैग:'कैट'} को हटाने के लिए)।पी>
एचटीएच - रोब।