Запрос Rethinkdb для данных между 2 датами

Я хотел бы выполнить запрос, который получает все документы, которые имеют 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 ответ

Решение

Я думаю, что ваш запрос может содержать некоторые подводные камни.

Во-первых, я предлагаю вам добавить 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
}]

Запрос возвращает правильно данные.

Другие вопросы по тегам