如何在 RethinkDB 中使用 getall 和 orderby
How to use getall with orderby in RethinkDB
我想列出两个时间戳之间id=1的记录,最后根据时间戳排序。
Mysql 查询内容:
Select * from test
where (timestamp between 100099323 AND 1423699323) AND id=1
order by timestamp
rethink 数据库中有超过 500 万个文档。
我尝试对简单的 mysql 查询使用索引:
Select * from test where id=1 order by timestamp
Rethinkdb 查询是:
r.table('test').getAll(1, {index: 'id'}).orderBy({index: 'timestamp'})
但我收到错误消息:
RqlRuntimeError: Indexed order_by can only be performed on a TABLE or
TABLE_SLICE in:
r.table("test").getAll(1, {index: "id"}).orderBy({index: "timestamp"})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
有什么建议吗?
RethinkDB 不支持高效的索引交集(Github 添加这个的问题是 #809),但是你可以通过为 [=28= 添加一个复合索引来有效地实现这个查询] 和 'timestamp' 索引。
如果您的结果集足够小,那么 orderBy
可以通过删除 'index' optarg 完全在内存中完成:
r.table("test").getAll(1, {index: "id"}).orderBy("timestamp")
要对大型结果集有效地执行此操作,您需要一个索引。假设您的 'id' 和 'timestamp' 索引直接对应于行中的字段,添加索引将如下所示:
r.table("test").indexCreate("id_time",
function(row) {
return [row("id"), row("timestamp")];
})
要获取带有 id=1
的所有行并按时间戳排序,您将 运行:
r.table("test").between([1], [2], {"index": "id_time"})
.orderBy({"index": "id_time"})
此外,回到您发布的原始查询,您可以通过 运行ning 在两个时间戳之间查询 id=1
:
r.table("test").between([1, <time 1>], [1, <time 2>], {"index": "id_time"})
.orderBy({"index": "id_time"})
我想列出两个时间戳之间id=1的记录,最后根据时间戳排序。
Mysql 查询内容:
Select * from test
where (timestamp between 100099323 AND 1423699323) AND id=1
order by timestamp
rethink 数据库中有超过 500 万个文档。
我尝试对简单的 mysql 查询使用索引:
Select * from test where id=1 order by timestamp
Rethinkdb 查询是:
r.table('test').getAll(1, {index: 'id'}).orderBy({index: 'timestamp'})
但我收到错误消息:
RqlRuntimeError: Indexed order_by can only be performed on a TABLE or
TABLE_SLICE in:
r.table("test").getAll(1, {index: "id"}).orderBy({index: "timestamp"})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
有什么建议吗?
RethinkDB 不支持高效的索引交集(Github 添加这个的问题是 #809),但是你可以通过为 [=28= 添加一个复合索引来有效地实现这个查询] 和 'timestamp' 索引。
如果您的结果集足够小,那么 orderBy
可以通过删除 'index' optarg 完全在内存中完成:
r.table("test").getAll(1, {index: "id"}).orderBy("timestamp")
要对大型结果集有效地执行此操作,您需要一个索引。假设您的 'id' 和 'timestamp' 索引直接对应于行中的字段,添加索引将如下所示:
r.table("test").indexCreate("id_time",
function(row) {
return [row("id"), row("timestamp")];
})
要获取带有 id=1
的所有行并按时间戳排序,您将 运行:
r.table("test").between([1], [2], {"index": "id_time"})
.orderBy({"index": "id_time"})
此外,回到您发布的原始查询,您可以通过 运行ning 在两个时间戳之间查询 id=1
:
r.table("test").between([1, <time 1>], [1, <time 2>], {"index": "id_time"})
.orderBy({"index": "id_time"})