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

Si Mongo $lookup est une jointure externe gauche, alors comment se fait-il qu'il exclut les documents non correspondants ?

Ce comportement n'est pas lié à $lookup , c'est parce que le comportement par défaut de $unwind est d'omettre les documents où le champ référencé est manquant ou un tableau vide.

Pour conserver les documents déroulés même lorsque profile.universities est un tableau vide, vous pouvez définir son preserveNullAndEmptyArrays option sur 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()