如何在汇总管道中结合$ match和$ or查找文档?
array filter.year:
[ { '$gte': '2015' },
{ '$gte': '2010', '$lte': '2015' },
{ '$gte': '2005', '$lte': '2010' },
{ '$gte': '2000', '$lte': '2005' },
{ '$lte': '2000' }
]
代码:
const query = [
{$match: {'active': filters.active}},
{
$lookup: {
from : 'yachts',
localField : 'yachtId',
foreignField: '_id',
as : 'yacht'
}
},
{$match: { $or: [{'yacht.specifications.constructionYear': filters.year}]}}
]
不返回任何文档。我想念什么吗?
答案 0 :(得分:1)
您得到的$match
阶段如下所示:
{ $or: [
{ 'yacht.specifications.constructionYear': [
{ '$gte': '2015' },
{ '$gte': '2010', '$lte': '2015' },
{ '$gte': '2005', '$lte': '2010' },
{ '$gte': '2000', '$lte': '2005' },
{ '$lte': '2000' }
] }
]}
它必须是:
{ $or: [
{ 'yacht.specifications.constructionYear': { '$gte': '2015' } },
{ 'yacht.specifications.constructionYear': { '$gte': '2010', '$lte': '2015' } },
{ 'yacht.specifications.constructionYear': { '$gte': '2005', '$lte': '2010' } },
{ 'yacht.specifications.constructionYear': { '$gte': '2000', '$lte': '2005' } },
{ 'yacht.specifications.constructionYear': { '$lte': '2000' } }
]}
如果您想使用filters
简洁地编写它,可以执行以下操作:
{$match: { $or: filters.year.map(condition => {
return {'yacht.specifications.constructionYear': condition}
})}}