MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Le champ Étranger de $lookup pourrait-il être le champ du document imbriqué ?

Il n'y a pas d'opérateur positionnel pour $lookup mais vous pouvez utiliser un pipeline personnalisé dans MongoDB 3.6 pour définir une jointure personnalisée conditions :

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"
        }
    }
])

Premier $match ajouté pour améliorer les performances :nous voulons rechercher uniquement les documents de childsgroup qui contiennent child_id correspondant puis nous pouvons faire correspondre les sous-documents après $unwind étape.