मैं _id से मिलान करने की कोशिश करने के लिए नेवला के साथ $lookup का उपयोग करते समय भी परेशानी में था क्योंकि मेरा संग्रह संदर्भ को एक स्ट्रिंग के रूप में संग्रहीत करता है, न कि एक ObjectId
मॉडल ए:{_id:ObjectId("xxx"), b_id:"eeeee"}
मॉडल बी:{_id:ObjectId("eeeee")}
MyCollectionA.aggregate([
{
$lookup: {
from: "collectionb",
let: {id: "$b_id"},
pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
as: b
}
])
इस उदाहरण में b कभी नहीं भरा जाता है क्योंकि $$id को ObjectId के रूप में नहीं माना जाता है
बस $$id को किसी objectId और उसके काम करने में बदलने के लिए एक प्रोजेक्ट जोड़ें
MyCollectionA.aggregate([
{
$lookup: {
from: "collectionb",
let: {id: "$b_id"},
pipeline: [
{$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
{$match: {$expr: {$eq: ["$_id", "$bid"]}}}
],
as: b
}
])
या विदेशी फ़ील्ड, लोकलफ़ील्ड के साथ:
MyCollectionA.aggregate([
{
$project:{
_id: 1,
b_id: {"$toObjectId": "$b_id"}
}
},
{
$lookup: {
from: "collectionb",
localField: "b_id",
foreignField: "_id",
as: b
}
])