पार्टी के लिए थोड़ा देर हो चुकी है, लेकिन उम्मीद है कि समाधान के लिए शिकार करने वाले अन्य लोगों की मदद करेंगे। मुझे एकत्रीकरण ढांचे का उपयोग करके ऐसा करने का एक तरीका मिल गया है और $ प्रोजेक्ट और $ को $ मैच के साथ जोड़कर, उन्हें एक साथ जोड़कर। मैंने इसे PHP का उपयोग करके किया है लेकिन आपको इसका सार मिल जाना चाहिए:
$ops = array(
array('$match' => array(
'collectionColumn' => 'value',
)
),
array('$project' => array(
'collection.subcollection' => 1
)
),
array('$unwind' => '$subCollection'),
array('$match' => array(
subCollection.subColumn => 'subColumnValue'
)
)
);
पहले मैच और प्रोजेक्ट का उपयोग केवल इसे तेज़ बनाने के लिए फ़िल्टर करने के लिए किया जाता है, फिर उप-संग्रह पर आराम प्रत्येक उप-संग्रह आइटम को आइटम द्वारा थूक देता है जिसे फिर अंतिम मिलान का उपयोग करके फ़िल्टर किया जा सकता है।
आशा है कि यह मदद करता है।
अद्यतन (रयान व्हील से):
फिर आप $group
. कर सकते हैं डेटा वापस अपनी मूल संरचना में। यह एक $elemMatch
. होने जैसा है जो एक से अधिक उप-दस्तावेज़ लौटाता है:
array('$group' => array(
'_id' => '$_id',
'subcollection' => array(
'$push' => '$subcollection'
)
)
);
मैंने इसे नोड से PHP में अनुवादित किया है, इसलिए मैंने PHP में परीक्षण नहीं किया है। अगर कोई नोड संस्करण चाहता है, तो नीचे एक टिप्पणी छोड़ दो और मैं उपकृत हो जाऊंगा।