如何解决MongoDB:$ lookup后对嵌套文档进行$ match
我需要查询与作业链接的时间卡集合,而作业与具有特定设施ID的设施链接。我有以下聚合查询:
Timecard.aggregate([
{ $match: query },//some query parameters set before,doesn't matter here
{
$lookup: {
from: 'jobs',as: 'job',localField: 'job',foreignField: '_id'
}
},{ $unwind: '$job' },{
$lookup: {
from: 'facilities',localField: 'job.facilityId'
foreignField: '_id',as: 'job.facilityId'
}
},{ $unwind: '$job.facilityId' },{ $match: {'job.facilityId._id':'5cad048d95d61a002f5a9edb'}}
];)
最后一次$ match之前的所有工作都很好,工作被填充到时间卡中,设施被填充到作业中。但是由于某些原因,该比赛无法正常进行。但是,如果我添加带有
的facilityId字段{$addFields: {facilityId: '$job.facilityId._id'}}
并将$ match更改为
{$match: 'facilityId':'5cad048d95d61a002f5a9edb'}
然后它起作用。 问题是,是否可以通过这种方式用点符号查询子文档的字段?
解决方法
您的最后一行可能需要是一个ObjectId
{ $match: {'job.facilityId._id': ObjectId('5cad048d95d61a002f5a9edb')}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。