我看到的问题与此非常相似,但没有一个答案是理想的,因为它们效率低下或无法正常工作。
我有一个数据库表,其中包含以下行:
id feed datetime content
我需要迭代表中feed
为example
(或任何其他值;始终为字符串)的每个项目,但迭代需要按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)
任何建议都会很棒,提前谢谢。
答案 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)
)