sql >> Databasteknik >  >> NoSQL >> MongoDB

Om Mongo $lookup är en vänster yttre koppling, hur kommer det sig då att den utesluter icke-matchande dokument?

Detta beteende är inte relaterat till $lookup , det beror på att standardbeteendet för $unwind är att utelämna dokument där det refererade fältet saknas eller en tom array.

För att bevara de avrullade dokumenten även när profile.universities är en tom array kan du ställa in dess preserveNullAndEmptyArrays alternativet till true :

db.users.aggregate([
    {
        $unwind: "$profile",
        $unwind: {
            path: "$profile.universities",
            preserveNullAndEmptyArrays: true
        }
    },
    {
        $lookup: {
            from: "universities",
            localField: "profile.universities._id",
            foreignField: "_id",
            as: "profile.universities"
        }
    },
    {
        $group: {
            _id: "$_id",
            universities: {
                $addToSet: "$profile.universities"
            }
        }
    }
]).pretty()



  1. Varför väntar detta utanför async-funktionen?

  2. Överväganden för att administrera MongoDB

  3. Mongo undantag

  4. Hur man använder $regex i mongodb aggregeringsfråga inom $match