Запрос 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
}]
Запрос возвращает правильно данные.