MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Das Foreign-Feld von $lookup könnte das Feld des verschachtelten Dokuments sein?

Es gibt keinen Positionsoperator für $lookup, aber Sie können eine benutzerdefinierte pipeline verwenden in MongoDB 3.6 zum Definieren benutzerdefinierter Joins Bedingungen :

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

Zuerst $match hinzugefügt, um die Leistung zu verbessern:Wir wollen nur die Dokumente von childsgroup finden die übereinstimmende child_id enthalten und dann können wir Unterdokumente nach $unwind abgleichen Stufe.