如何 select 数据从开始日期到结束日期开始进行续集(意味着不包括结束日期)

How to select data with sequelize from startdate upto the beginning of enddate (meaning excluding the enddate)

我得到了数据集。数据集的属性之一是 'timestamp'。我想要 select(有效地)数据集,这些数据集的时间戳从某个开始日期开始到某个结束日期。但是不应包括结束日期本身。所以基本上我想要这个:dataSet WHERE timestamp >= startDate AND timestamp < endDate

我有一个 couchDB,我想 select 使用 sequelize。

假设开始日期和结束日期如下所示:

var startDate = '2015-07-29 00:00:00';
var endDate = '2015-07-30 00:00:00';

那么应该包括从这些日期开始的所有内容:

2015-07-29 00:00:00 (<--startDate)
2015-07-29 00:00:01
2015-07-29 00:00:02
....
2015-07-29 23:59:59 (<--my desired end-Date. It's right before endDate)

不包括结束日期本身(即 2015-07-30 00:00:00)。

这是我试过的:

db.answer.findAll({
      where: {id: { in: [myId]},
             timestamp: { between: {[startDate, endDate]}
           }

这为我提供了带有时间戳的数据集,包括开始日期和结束日期。我只想要截止日期。不包括结束日期本身。

虽然下面的查询应该给我正确的结果 (dataSet >=startDate AND dataSet < endDate)

  db.answer.findAll({
      where: {id: { in: [myId]},
             timestamp: { gte: startDate},
             timestamp: { lt: endDate}
           }

它会给我错误的结果。 (对不起,我不能在这里具体说明,因为我现在无法访问系统。我记得虽然它没有 return 我想要的结果。当我可以访问数据库时,我会更新这部分再次。)

我知道我可以将结束日期设置为 2015-07-29 23:59:59。但我觉得有一种更优雅的方法。

第二个示例将不起作用,因为您在对象中有两次相同的键(时间戳)。这在 javascript 中是不允许的,因此其中一个被忽略。

你应该把这两个包裹在 $and:

db.answer.findAll({
  where: {
    id: {in: [myId]},
    $and: [
      { timestamp: {gte: startDate} },
      { timestamp: {lt: endDate} }
    ]
  }
});

我不知道 sequelize,但是 couchdb 确实提供了一个参数 inclusive_end,可以在文档中找到:https://wiki.apache.org/couchdb/HTTP_view_API

也许这是解决方案的起点。