1

我的文档包含以下字段:

"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”字段之间的天数。即以天为单位确定有效期。

4

1 回答 1

4

#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_tovalid_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)
于 2015-06-08T18:14:10.897 回答