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