MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Se Mongo $ lookup é uma junção externa esquerda, então como é que ele exclui documentos não correspondentes?


Este comportamento não está relacionado a $lookup , é porque o comportamento padrão para $unwind é omitir documentos onde o campo referenciado está ausente ou uma matriz vazia.

Para preservar os documentos desenrolados mesmo quando profile.universities é uma matriz vazia, você pode definir seu preserveNullAndEmptyArrays opção para 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()