Запустите агрегирующую операцию для коллекции letters
, в которой конвейер сначала выполняет $lookup
для коллекции users
, объединенной в поле email
.
Документы, возвращаемые с этой стадии конвейера, содержат поле массива с присоединенными документами, поэтому вам потребуется дополнительный шаг конвейера $match
, чтобы отфильтровать документы, если в этом новом поле нет документов. , Это можно сделать, проверив длину поля массива с помощью $size
и отфильтровав с помощью выражения $expr
с оператором сравнения $eq
.
Результат может быть далее $project
ed для удаления нового поля в тех документах, которые соответствуют конечному желаемому результату.
Вышеуказанный конвейер можно выразить как:
db.letters.aggregate([
{ '$lookup': {
'from': 'users',
'localField': 'email',
'foreignField': 'email',
'as': 'users'
} },
{ '$match': { '$expr': { '$eq': [ { '$size': '$users' }, 0 ] } } },
{ '$project': { 'users': 0 } }
])