我正在查询一段时间内的事件数据库。查询如下所示:
{
$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 = { ... }
}
我的问题是:在查询本身中是否有更优雅的方法?例如,一种理想的解决方案可能是始终在查询中具有开始和结束约束,但在没有时间约束的情况下,对startDate
和endDate
使用正负无穷大。
我的...选项是什么?