RethinkDB getAll按日期与索引排序

时间:2016-03-26 18:00:03

标签: python python-2.7 rethinkdb

我看到的问题与此非常相似,但没有一个答案是理想的,因为它们效率低下或无法正常工作。

我有一个数据库表,其中包含以下行:

id feed datetime content

我需要迭代表中feedexample(或任何其他值;始终为字符串)的每个项目,但迭代需要按datetime排序。< / p>

不幸的是,我无法在内存中执行此操作,因为单个用户可能会有数十万个条目。

我尝试修改找到here的代码并且没有取得任何进展。我还调整了最佳答案here并在运行时遇到错误;

print r.db('main').table('data').between([feedid, r.minval], [feedid, r.maxval], index="feedByTime").order_by(index="feedByTime").run(conn)

会抛出此错误;

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/rethinkdb/net.py", line 196, in __str__ val_str = ', '.join(map(repr, self.items[:10])) TypeError: sequence index must be integer, not 'slice'

如果我从index="feedByTime"删除between,我会收到此错误;

rethinkdb.errors.ReqlQueryLogicError: Cannot order by index 'feedByTime' after calling BETWEEN on index 'id'

索引(feedByTime)是这样制作的;

r.db('main').table('data').index_create("feedByTime", lambda x: [x["feed"], x["datetime"]]).run(conn)

任何建议都会很棒,提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的查询存在问题:

而不是

query = (
    r.db('main').table('data')
     .between(
         [feedid, r.minval],
         [feedid, r.maxval],
         index="feedByTime"
     )
     .order_by(index="feedByTime")
     .run(conn)
)

尝试

query = (
    r.db('main').table('data')
     .between(
         [feedid, r.minval],
         [feedid, r.maxval],
         index="feedByTime"
     )
     .order('datetime')
     .run(conn)
)