Rethinkdb查询2个日期之间的数据

时间:2016-01-20 20:34:47

标签: rethinkdb rethinkdb-javascript

我想运行一个查询,该查询从截至今天的日期获取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); });

这不会返回任何错误或结果。我显然不想硬编码那里的日期,所以我有一些逻辑来制作一个新的r.time(yyyy,dd,mm),但这给我的结果与这个硬编码的结果相同。

1 个答案:

答案 0 :(得分:2)

我认为您的查询可能包含一些陷阱。

首先,我建议您将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); });

所以让我们试试这个:

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) })
})

更新

我尝试将NodeJS与官方驱动器一起使用:

[{
"id":  "4917c8a1-1639-400c-964c-458d58b5bfcc" ,
"lastUpdateDate": Wed Jan 20 2016 21:12:51 GMT+00:00
}]

在此日期设定:

{{1}}

查询正确返回数据。