Если Mongo $ lookup является левым внешним соединением, то почему оно исключает несовпадающие документы?
Название говорит само за себя. Почему, если документ не приводит ни к какому внешнему документу, соответствующему соответствующему полю, то почему он не включен в набор результатов конвейера?
Я тестирую новые агрегаторы в Mongo 3.2 и зашел так далеко, что выполнил поиск вложенных массивов, сначала развернув, а затем сгруппировав документы обратно. Все, что я оставил, это чтобы результаты включали все местные документы, которые не соответствовали$lookup
критерий, который, как я думал, был стандартным определением «левого внешнего соединения».
Вот запрос:
db.users.aggregate([
{
$unwind: "$profile",
$unwind: "$profile.universities"
},
{
$lookup: {
from: "universities",
localField: "profile.universities._id",
foreignField: "_id",
as: "profile.universities"
}
},
{
$group: {
_id: "$_id",
universities: {
$addToSet: "$profile.universities"
}
}
}
]).pretty()
Так что если у меня естьuser
который имеет пустойprofile.universities
массив, то мне нужно, чтобы он был включен в набор результатов независимо от$lookup
возвращаюсь, никаких совпадений, но это не так. Как я могу это сделать, и любая причина, почему Монго построил$lookup
действовать таким образом?