2015-06-08 1 views
1

Мои документы содержат следующие поля:REQL Дата и время запросов

"valid_from": "Mar 17 08:55:04 2011 GMT" 
"valid_to": "Mar 16 08:55:04 2017 GMT" 

Мой базовый запрос в настоящее время выглядит следующим образом:

r.db('items').table('token') 
  1. Как я могу запросить только извлечь/фильтра документы между текущим дате-временем (сейчас) и поле «valid_to»? то есть считается, что все с датой «valid_to», которая меньше текущей даты/времени, истекло.

  2. Рассчитайте количество дней между полями «valid_from» и «valid_to». т. е. определить срок действия в днях.

ответ

3

# 1

Таким образом, в основном вы хотите, чтобы все документы, которые до сих пор не истек? (valid_to) в будущем?

Для этого вы должны обязательно использовать функции времени/даты RethinkDB. Для этого вам нужно создать экземпляр времени с r.time или r. ISO8601. Примером этого является:

r.table('tokens') 
    .insert({ 
    "valid_from": r.ISO8601("2011-03-17T08:55:04-07:00"), 
    "valid_to": r.ISO8601("2017-03-17T08:55:04-07:00") 
    }) 

После того, как вы вставили/обновить документы, используя эти функции, вы можете запросить их с помощью функции времени/даты RethinkDB в. Я вы хотите, чтобы все документы, в которых valid_to находится в будущем, вы можете сделать это:

r.table('tokens') 
    .filter(r.row['valid_to'] > r.now()) 

Если вы хотите, чтобы получить все документы, где valid_to находится в будущем и valid_from в прошлом, вы можете сделать это:

r.table('tokens') 
    .filter(r.row['valid_to'] > r.now()) 
    .filter(r.row['valid_from'] < r.now()) 

# 2

Если оба эти свойства (valid_to и valid_from) по времени/дате объектов, вы можете добавить days свойство к каждому документу, выполнив следующие действия:

r.table('tokens') 
    .merge({ 
    // Subtract the two properties. Divide by seconds * minutes * hours 
    "days": (r.row['valid_to'] - r.row['valid_from'])/(60 * 60 * 24) 
    }) 

Питон Код

import rethinkdb as r 
conn = r.connect() 
cursor = r.table('30715780').filter(r.row['valid_to'] < r.now()).count().run(conn) 
print list(cursor) 
+0

Хорхе, я следую вашему примеру здесь, но по какой-то причине, данные не возвращаются при работе: г. table («токены»). filter (r.row ['valid_to']> r.now()). Любая идея почему? – Gai

+0

ОК. Мне удалось заставить его работать. Я думаю, что синтаксис был изменен: r.table ('tokens'). Filter (r.row ('valid_to'). Gt (r.now())) – Gai

+0

На каком языке вы используете? '>' и '<' работают только на некоторых языках, так как это происходит при перегрузке оператора. JavaScript не является одним из этих языков. –