बात यह है कि जब आप lookup
. करते हैं pipeline
. का उपयोग करना मैच चरण के साथ, तब अनुक्रमणिका का उपयोग केवल उन फ़ील्ड के लिए किया जाएगा जो $eq operator
से मेल खाते हैं और बाकी के लिए अनुक्रमणिका का उपयोग नहीं किया जाएगा।
और आपके द्वारा पाइपलाइन के साथ निर्दिष्ट उदाहरण इस तरह काम करेगा ( फिर से अनुक्रमणिका का उपयोग यहां नहीं किया जाएगा क्योंकि यह नहीं है $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
चूंकि खिलाड़ी ऑब्जेक्ट की एक सरणी है, इसलिए इसे पहले आईडी की सरणी में मैप करने की आवश्यकता है