【问题标题】:Match a variable for a mongodb query only if it exists仅当存在时才匹配 mongodb 查询的变量
【发布时间】:2018-08-25 00:14:33
【问题描述】:

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

所以我必须这样做:

const match = {};

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

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

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

有没有办法直接在查询中编写此代码,而不必在聚合外部使用 match 变量?

【问题讨论】:

  • 不,你做的就是你做的。
  • 唯一的方法是为每个条件创建不同的 api

标签: mongodb mongoose mongodb-query


【解决方案1】:

你可以试试这样的:

    db.User.find(
            { $or: 
               [ { $and: [ { "status": { $exists: true } },{ "status": status } ] }, 
                 { $and: [ { "endDate": { $exists: true } },
                           { "startDate": { $exists: true } }, 
                           { $gte: startOfDay(startDate), $lte: endOfDay(endDate) }] } 
               ] })

【讨论】:

  • 这行不通。 $exists 检查数据库中是否存在。我正在尝试找到一种方法来检查变量是否存在。
  • 嗨,你能详细解释一下你想检查哪个变量吗?您是否尝试过提供的 find() 查询?
  • OP需要检查是否包含各种请求参数,而不是用户文档中是否存在字段。
猜你喜欢
  • 1970-01-01
  • 2021-01-07
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
相关资源
最近更新 更多