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()