Rethinkdb 查询两个日期之间的数据
Rethinkdb query for data between 2 dates
我想 运行 查询获取从提供的日期到今天具有 lastUpdateDate
的所有文档。
lastUpdateDated 的定义类似于
lastUpdateDate = new Date()
-> Tue Jan 19 2016 20:45:32 GMT+00:00
以下作品在RethinkDB Admin console
r.db('water').table('ground_water').filter(function (test) {
return test("lastUpdateDate").during(r.time(2015,1,1, 'Z'), r.now().date())
});
但这是实际代码(我必须对日期做一些处理)
.table('ground_support_water_tests')
.filter(function(test) {
return test("lastUpdateDate").during(
r.time(2016,1,19, 'Z'),
r.now().date())
})
.run()
.then((results) => {
console.log(results);
done(null, results);
})
.catch((err) => {console.log(err); });
这returns没有错误或结果。我显然不喜欢在那里硬编码日期,所以我有一些逻辑来制作一个新的 r.time(yyyy,dd,mm)
但这给我的结果与这个硬编码的结果相同。
我认为您的查询可能包含一些陷阱。
首先,我建议您在选项中添加rightBound: "closed"
。因为你在 date()
上比较,你根本不关心时间。
其次,我建议您更改 test("lastUpdateDate")
-> test("lastUpdateDate").date()
,因为您使用 date
删除了时间,它变成了 Wed Jan 20 2016 00:00:00 GMT+00:00
而作为您的 test("lastUpdateDate")
例如 Wed Jan 20 2016 18:00:00 GMT+00:00
。
让我们试试这个:
.table('ground_support_water_tests')
.filter(function(test) {
return test("lastUpdateDate").date().during(
r.time(2016,1,19, 'Z'),
r.now().date())
}, {rightBound: "closed"})
.run()
.then((results) => {
console.log(results);
done(null, results);
})
.catch((err) => {console.log(err); });
更新:
我尝试在官方驱动下使用 NodeJS:
var r = require('rethinkdb')
r.connect().then(function(conn) {
r.table('t')
.filter((test) => {
return test("lastUpdateDate").date().during(r.time(2015,1,1, 'Z'), r.now().date(), {rightBound: "closed"})
})
.run(conn)
.then((cursor) => { return cursor.toArray() })
.then((data) => { console.log(data) })
})
在此日期设置:
[{
"id": "4917c8a1-1639-400c-964c-458d58b5bfcc" ,
"lastUpdateDate": Wed Jan 20 2016 21:12:51 GMT+00:00
}]
查询returns正确数据。
我想 运行 查询获取从提供的日期到今天具有 lastUpdateDate
的所有文档。
lastUpdateDated 的定义类似于
lastUpdateDate = new Date()
-> Tue Jan 19 2016 20:45:32 GMT+00:00
以下作品在RethinkDB Admin console
r.db('water').table('ground_water').filter(function (test) {
return test("lastUpdateDate").during(r.time(2015,1,1, 'Z'), r.now().date())
});
但这是实际代码(我必须对日期做一些处理)
.table('ground_support_water_tests')
.filter(function(test) {
return test("lastUpdateDate").during(
r.time(2016,1,19, 'Z'),
r.now().date())
})
.run()
.then((results) => {
console.log(results);
done(null, results);
})
.catch((err) => {console.log(err); });
这returns没有错误或结果。我显然不喜欢在那里硬编码日期,所以我有一些逻辑来制作一个新的 r.time(yyyy,dd,mm)
但这给我的结果与这个硬编码的结果相同。
我认为您的查询可能包含一些陷阱。
首先,我建议您在选项中添加rightBound: "closed"
。因为你在 date()
上比较,你根本不关心时间。
其次,我建议您更改 test("lastUpdateDate")
-> test("lastUpdateDate").date()
,因为您使用 date
删除了时间,它变成了 Wed Jan 20 2016 00:00:00 GMT+00:00
而作为您的 test("lastUpdateDate")
例如 Wed Jan 20 2016 18:00:00 GMT+00:00
。
让我们试试这个:
.table('ground_support_water_tests')
.filter(function(test) {
return test("lastUpdateDate").date().during(
r.time(2016,1,19, 'Z'),
r.now().date())
}, {rightBound: "closed"})
.run()
.then((results) => {
console.log(results);
done(null, results);
})
.catch((err) => {console.log(err); });
更新:
我尝试在官方驱动下使用 NodeJS:
var r = require('rethinkdb')
r.connect().then(function(conn) {
r.table('t')
.filter((test) => {
return test("lastUpdateDate").date().during(r.time(2015,1,1, 'Z'), r.now().date(), {rightBound: "closed"})
})
.run(conn)
.then((cursor) => { return cursor.toArray() })
.then((data) => { console.log(data) })
})
在此日期设置:
[{
"id": "4917c8a1-1639-400c-964c-458d58b5bfcc" ,
"lastUpdateDate": Wed Jan 20 2016 21:12:51 GMT+00:00
}]
查询returns正确数据。