我们有一个 rethinkdb,里面有票。它们有一个 createdAt 时间戳(以毫秒为单位)和一个优先级属性。
例如
{
createdAt: 12345,
priority: 4,
owner: "Bob",
description: "test",
status: "new"
}
rethinkdb.db('dev').table(tableId)
.orderBy({index: 'createdAt'})
.between(timeFrom,timeTo)
.filter(filter)
.skip(paginator).limit(20).run(this.connection);
我们现在有以下问题。我们想要一个执行两个 orderBy 的查询……第一个是 orderBy “priority”,也是 “createdAt”。因此,给定过滤器和时间跨度,它应该返回具有最高优先级的票证,并且在优先级内最旧的票证应该在最前面。
我们尝试建立一个具有优先级和 createdAt 的复合索引。这确实有效,但是 .between 没有按预期在该索引上工作。
rethinkdb.db('dev').table('tickets').indexCreate('prioAndCreatedAt' [rethinkdb.row('priority'), rethinkdb.row('createdAt')]).run(this.connection)
使用查询:
rethinkdb.db('dev').table(tableId)
.orderBy({index: 'prioAndCreatedAt'})
.between([rethinkdb.minval, timeFrom],[rethinkdb.maxval , timeTo])
.filter(filter)
.skip(paginator).limit(20).run(this.connection);
在我们看来,应该首先按优先级排序,然后按 createdAt 和 .between 进行排序,我们将忽略优先级(因为 .minval 和 .maxval),只获取 timeFrom 和 timeTo 之间的所有票证。
Buuuut 还返回了 createdAt 小于 timeFrom 的票证。所以这不像我们计划的那样工作。就像这样的“问题”:RethinkDB Compound Index Weirdness Using Between
但是我们想不出另一种方法来解决这个问题。