我正在使用聚合返回符合特定条件的用户列表。问题是我从前端获取的变量并非总是设置好的。
所以我必须做这样的事情:
const match = {};
if (status) {
match.status = status;
}
if (startDate && endDate) {
match.createdAt = { $gte: startOfDay(startDate), $lte: endOfDay(endDate) };
}
await User.aggregate([
{
$match: match,
},
]);
有没有一种方法可以直接在查询中编写此代码而不必在聚合之外使用match
变量?
答案 0 :(得分:-1)
您可以尝试以下操作:
db.User.find(
{ $or:
[ { $and: [ { "status": { $exists: true } },{ "status": status } ] },
{ $and: [ { "endDate": { $exists: true } },
{ "startDate": { $exists: true } },
{ $gte: startOfDay(startDate), $lte: endOfDay(endDate) }] }
] })