MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Se Mongo $lookup è un join esterno sinistro, come mai esclude i documenti non corrispondenti?

Questo comportamento non è correlato a $lookup , è perché il comportamento predefinito per $unwind è omettere i documenti in cui il campo di riferimento è mancante o un array vuoto.

Per preservare i documenti srotolati anche quando profile.universities è un array vuoto, puoi impostarne il preserveNullAndEmptyArrays opzione su 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()