我有数据集。数据集的一个属性是&#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
。但我觉得有更优雅的方法。
答案 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
也许这是解决方案的起点。