时才聚合$ match"/>
Node.Js仅在变量存在时才聚合$ match
在我的数据库中,我有以下类型的数据:
{
"_id": "xxx",
"amount": 800,
"title": "teste",
"date": "2020-05-13T18:35:20.000Z",
"paid": true,
"type": "expense",
"category": "debts_loans",
"__v": 0
}
我有以下代码,用于从mongoDB数据库聚合数据。
const { initialDate, finalDate, paid = null } = req.query;
try {
const transactions = await Transaction.aggregate([
{
$match: {
date: {
$gte: new Date(initialDate),
$lte: new Date(finalDate),
},
},
}, ...
在$match
聚合中,我只想在paid
存在的情况下对其进行聚合,否则,我只想按date
进行聚合。我怎样才能做到这一点? url参数paid
是可选的(可能为true或不存在),是反模式吗?
回答如下:
在这种情况下,您需要根据paid
切换查询,如下所示:
const { initialDate, finalDate, paid } = req.query; // No need to make it null if it's not there in req.
let pipeline = [];
paid == undefined ?
pipeline.push({ $match: { date: { $gte: new Date(initialDate), $lte: new Date(finalDate) } } }) :
pipeline.push({ $match: { paid: paid } })
try {
const transactions = await Transaction.aggregate(pipeline)
} catch () {}
更多推荐
Node.Js仅在变量存在时才聚合$ match
发布评论