Mongodb:使用$ and处理可选查询

时间:2019-05-09 16:50:23

标签: mongodb

我正在查询一段时间内的事件数据库。查询如下所示:

{
$and: [
    { $or: [
      { start:
        { "$gte": startDate,
          "$lte": endDate
        }
      },
      { end: // (allows for showing the end of time spans in this window)
        { "$gte": startDate,
          "$lte": endDate
        }
      }
    ] },
    { $or: [
      { $text: { '$search': searchTerm } },
      { tags: { $regex: searchRegex } }
    ] }
 ]
}

这里的想法是有一个内容约束和一个时间约束。我想将时间限制设为可选。 (更复杂的是,end约束也是可选的。)

一种方法是按常规构建查询本身。但是由于这两个约束都在$and内部,所以我不能只删除一个约束,因为它只接受包含2个以上元素的数组。因此,它必须非常详尽:

query = {}

if(hasTimeConstraint){
  query.$and = { ... }
} else {
  query.$or = { ... }
}

我的问题是:在查询本身中是否有更优雅的方法?例如,一种理想的解决方案可能是始终在查询中具有开始和结束约束,但在没有时间约束的情况下,对startDateendDate使用正负无穷大。

我的...选项是什么?

0 个答案:

没有答案