【发布时间】:2018-10-26 19:05:26
【问题描述】:
上下文
我正在构建一个查询,用户可以在其中输入一系列日期来搜索“播放器”文档。查询应返回开始和结束日期与查询日期重叠的任何玩家。我通过使用 OR 条件来执行此操作,其中玩家的结束日期在查询的开始日期之后,或者玩家的开始日期在查询的结束日期之前。查询中的两个日期都是可选的,允许用户仅指定结束日期或开始日期,或者都不返回所有相关文档。
问题
当仅指定两个查询日期之一时,查询有效(请参见下面的屏幕截图)。但是,如果指定了两个日期,它会返回所有文档(功能上忽略两个查询参数)。
代码
let query = Player.find({'casino': user.casino});
let queryArray = [];
if(req.body.startDate) {
queryArray.push({playerEndDtm: {$gt: moment(req.body.startDate).toDate()}});
}
if(req.body.endDate) {
queryArray.push({playerStartDtm: {$lt: moment(req.body.endDate).endOf('day').toDate()}});
}
if(queryArray.length > 0) {
query.or(queryArray);
}
谁能帮我确定我做错了什么?谢谢!
【问题讨论】:
-
endate 查询需要 2 个条件。我正在添加作为答案。
标签: javascript mongodb mongoose query-builder or-operator