我的文档包含以下字段:
"valid_from": "Mar 17 08:55:04 2011 GMT"
"valid_to": "Mar 16 08:55:04 2017 GMT"
我的基本查询目前如下所示:
r.db('items').table('token')
如何查询仅检索/过滤当前日期时间(现在)和“valid_to”字段之间的文档?即任何“valid_to”日期小于当前日期/时间的内容都被视为已过期。
计算“valid_from”和“valid_to”字段之间的天数。即以天为单位确定有效期。
答案 0 :(得分: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_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)