【发布时间】:2021-01-28 08:58:26
【问题描述】:
我在聚合管道中使用 $lookup 时遇到问题。
我有 2 个收藏,members 和 messages
成员:
{_id, FirstName, LastName, Email, ...}
消息
{
_id:ObjectId('xxx'),
createdBy:ObjectId(''),
...
threads:[
{ message:'' , attachments:[] , from:ObjectId , to:[{status:'Read' , recipient:ObjectId}] }]
}
我想做的是,
在to:[{status:'Read' , recipient:ObjectId}] 中查找每个收件人,并从成员集合中填充姓名和电子邮件。
我尝试了很多不同的东西,比如这个; //
db.messages.aggregate([
{
'$lookup': {
'from': 'members',
'let': {
'memberId': '$threads.to.recipient'
},
'pipeline': [
{
'$match': {
'$expr': {
'$eq': [
'$$memberId', '$members._id'
]
}
}
},
{$project: {FirstName: 1, _id: 1, LastName: 1, Email: 1}}
],
'as': 'members'
}
}
]
包括这个在内的许多不同查询总是为成员返回 []('as': 'members')。
只是为了测试我厌倦了猫鼬和 .populate('threads.to.recipient','FirstName') 工作得很好。但我不能为此使用 mongoose,我必须使用 MongoDB 的本机 nodejs 驱动程序。
对此的任何建议将不胜感激......
【问题讨论】:
-
请以 mongo shell-executable 格式添加示例数据。
标签: node.js mongodb mongoose aggregation-framework