sql >> Base de Datos >  >> NoSQL >> MongoDB

Si Mongo $lookup es una combinación externa izquierda, ¿cómo es que excluye los documentos que no coinciden?

Este comportamiento no está relacionado con $lookup , es porque el comportamiento predeterminado para $unwind es omitir documentos en los que falta el campo de referencia o una matriz vacía.

Para preservar los documentos desenrollados incluso cuando profile.universities es una matriz vacía, puede establecer su preserveNullAndEmptyArrays opción a 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()