आपका ids
वेरिएबल "स्ट्रिंग्स" का निर्माण किया जाएगा, न कि ObjectId
मान।
ObjectId
. के लिए नेवला "ऑटोकास्ट" स्ट्रिंग मान नियमित प्रश्नों में उनके सही प्रकार में, लेकिन यह समेकन पाइपलाइन में नहीं होता है, जैसा कि अंक #1399 में वर्णित है।
इसके बजाय आपको मैन्युअल रूप से टाइप करने के लिए सही कास्टिंग करनी होगी:
ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })
फिर आप उन्हें अपने पाइपलाइन चरण में उपयोग कर सकते हैं:
{ "$match": { "_id": { "$in": ids } } }
इसका कारण यह है कि एकत्रीकरण पाइपलाइन "आमतौर पर" दस्तावेज़ संरचना को बदल देती है, और इसलिए नेवला कोई अनुमान नहीं लगाता है कि "स्कीमा" किसी भी पाइपलाइन चरण में दस्तावेज़ पर लागू होती है।
यह तर्कपूर्ण है कि "पहला" पाइपलाइन चरण जब यह एक $match
. है मंच को ऐसा करना चाहिए, क्योंकि वास्तव में दस्तावेज़ में कोई बदलाव नहीं किया गया है। लेकिन अभी ऐसा नहीं होता है।
कोई भी मान जो संभवतः "स्ट्रिंग्स" हो सकता है या कम से कम सही बीएसओएन प्रकार नहीं है, मिलान करने के लिए मैन्युअल रूप से डालने की आवश्यकता है।