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». т.е. определить срок действия в днях.


person user1513388    schedule 08.06.2015    source источник


Ответы (1)


№1

Итак, в основном вам нужны все документы, срок действия которых еще не истек? (valid_to) в будущем?

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

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

Код Python

import rethinkdb as r
conn = r.connect()
cursor = r.table('30715780').filter(r.row['valid_to'] < r.now()).count().run(conn)
print list(cursor)
person Jorge Silva    schedule 08.06.2015
comment
Хорхе, я следую вашему примеру, но по какой-то причине при запуске не возвращаются данные: r.table ('tokens'). Filter (r.row ['valid_to'] ›r.now ()). Есть идеи, почему? - person Gai; 11.09.2016
comment
OK. Мне удалось заставить это работать. Я предполагаю, что синтаксис был изменен: r.table ('tokens'). Filter (r.row ('valid_to'). Gt (r.now ())) - person Gai; 11.09.2016
comment
Какой язык вы используете? > и < работают только на некоторых языках, так как это делается путем перегрузки оператора. JavaScript не относится к таким языкам. - person Jorge Silva; 12.09.2016
comment
Я использую javascript (nodejs), так что, вероятно, это так, но он также не работал при запуске из проводника данных веб-администратора ... на всякий случай, если кто-то еще попытается его использовать. Спасибо! - person Gai; 14.09.2016