J'avais aussi des problèmes en utilisant $lookup avec mangouste pour essayer de faire correspondre _id car ma collection stocke la référence sous forme de chaîne et non d'ObjectId
Modèle A :{_id :ObjectId("xxx"), b_id :"eeeee"}
Modèle B :{_id :ObjectId("eeeee")}
MyCollectionA.aggregate([
{
$lookup: {
from: "collectionb",
let: {id: "$b_id"},
pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
as: b
}
])
Dans cet exemple, b n'est jamais rempli car $$id n'est pas considéré comme un ObjectId
Ajoutez simplement un projet pour transformer $$id en objectId et son fonctionnement
MyCollectionA.aggregate([
{
$lookup: {
from: "collectionb",
let: {id: "$b_id"},
pipeline: [
{$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
{$match: {$expr: {$eq: ["$_id", "$bid"]}}}
],
as: b
}
])
Ou avec ForeignField, localField :
MyCollectionA.aggregate([
{
$project:{
_id: 1,
b_id: {"$toObjectId": "$b_id"}
}
},
{
$lookup: {
from: "collectionb",
localField: "b_id",
foreignField: "_id",
as: b
}
])