sql >> Databasteknik >  >> NoSQL >> MongoDB

Det främmande fältet i $lookup kan vara fältet för kapslade dokument?

Det finns ingen positionsoperator för $lookup men du kan använda anpassad pipeline i MongoDB 3.6 för att definiera anpassad join villkor :

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

Första $match läggs till för att förbättra prestandan:vi vill bara hitta de dokument från childsgroup som innehåller matchande child_id och sedan kan vi matcha underdokument efter $unwind skede.




  1. .NET Core injicera singleton-tjänst i en annan singleton-tjänst

  2. Kombinera två ELLER-frågor med AND i Mongoose

  3. Lagra Enums som strängar i MongoDB

  4. Hitta dokument inklusive element i Array-fältet med mongomapper?