仅在存在mongodb查询的变量时对其进行匹配

时间:2018-08-24 13:31:33

标签: mongodb mongoose mongodb-query

我正在使用聚合返回符合特定条件的用户列表。问题是我从前端获取的变量并非总是设置好的。

所以我必须做这样的事情:

const match = {};

if (status) {
  match.status = status;
}

if (startDate && endDate) {
  match.createdAt = { $gte: startOfDay(startDate), $lte: endOfDay(endDate) };
}

await User.aggregate([
  {
     $match: match,
  },
]);

有没有一种方法可以直接在查询中编写此代码而不必在聚合之外使用match变量?

1 个答案:

答案 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) }] } 
               ] })