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

Wie füllt man ein tief verschachteltes Array von IDs nach der aggregierten Suche in Mongodb?

Versuchen Sie Folgendes:

db.A.aggregate([
    {
        $lookup: {
            from: "B",
            let: { refToA: "$_id" },
            pipeline: [
                {
                    $match: {
                        $expr: { $eq: ["$refToA", "$$refToA"] }
                    }
                },
                { $unwind: "$items" },
                { $unwind: "$items.options" },
                {
                    $lookup: {
                        from: "C",
                        localField: "items.options.codes",
                        foreignField: "_id",
                        as: "items.options.codes"
                    }
                },
                {
                    $group: {
                        _id: {
                            id: "$_id",
                            itemLabel: "$items.itemLabel"
                        },
                        labelB: { $first: "$labelB" },
                        refToA: { $first: "$refToA" },
                        items: {
                            $push: {
                                "itemLabel": "$items.itemLabel",
                                "options": "$items.options"
                            }
                        }
                    }
                },
                {
                    $group: {
                        _id: "$_id.id",
                        labelB: { $first: "$labelB" },
                        refToA: { $first: "$refToA" },
                        items: {
                            $push: {
                                itemLabel: "$_id.itemLabel",
                                "options": "$items.options"
                            }
                        }
                    }
                }
            ],
            as: "BCollection"
        }
    }
]);