如何从startdate到enddate开头的sequelize选择数据(意味着排除enddate)

时间:2015-07-31 04:15:16

标签: javascript mysql date couchdb sequelize.js

我有数据集。数据集的一个属性是&#39; timestamp&#39;。我想选择(有效)数据集,这些数据集的时间戳从某个开始日期开始直到某个结束日期。但是,不应包括结束日期本身。基本上我想要这个:dataSet WHERE timestamp >= startDate AND timestamp < endDate

我有一个couchDB,我想用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)

不包括enddate本身(即2015-07-30 00:00:00)。

这就是我的尝试:

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

这给了我带有时间戳的数据集,包括开始日期和结束日期。我只想到结束日期。不包括结束日期本身。

虽然以下查询应该给我正确的结果(dataSet&gt; = startDate AND dataSet&lt; endDate)

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

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

我知道我可以设置enddate为2015-07-29 23:59:59。但我觉得有更优雅的方法。

2 个答案:

答案 0 :(得分:1)

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

你应该将这两个包装在$and

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

答案 1 :(得分:1)

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

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