MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il campo Estero di $lookup potrebbe essere il campo del documento nidificato?

Non esiste un operatore posizionale per $lookup ma puoi utilizzare la pipeline personalizzata in MongoDB 3.6 per definire un join personalizzato condizioni :

db.history.aggregate([
    {
        $lookup: {
            from: "childsgroup",
            let: { child_id: "$child_id" },
            pipeline: [
                { $match: { $expr: { $in: [ "$$child_id", "$childs.id" ] } } },
                { $unwind: "$childs" },
                { $match: { $expr: { $eq: [ "$childs.id", "$$child_id" ] } } },
                { $replaceRoot: { newRoot: "$childs" } }
            ],
            as: "childInfo"
        }
    }
])

Prima $match aggiunto per migliorare le prestazioni:vogliamo trovare solo quei documenti da childsgroup che contengono child_id corrispondenti e quindi possiamo abbinare i documenti secondari dopo $unwind fase.