我在RethinkDB表中存储了以下数据结构:
{
id: string,
parentId: string,
timestamp: number,
data: Object
}这种数据结构形成了一棵树,它可以用以下图表来描述(白色记录表示普通的数据携带记录,红色记录的data属性等于表示删除操作的null ):

现在,对于表中的每一条记录,我希望能够计算nextRecord。这是时间上与当前记录最近的记录。当只有一条记录指向父级时,任务看起来很简单:
1 => 2
4 => 9
5 => 6
6 => 8
...但是,当父记录被几个子记录引用时,计算这样的值变得更加困难:
2 => 3
3 => 5
7 => 11如果没有子引用,则结果应该是null (例如,记录#8没有子记录,因此应该返回null )。
因此,我并不要求编写查询本身(另一方面,这对我来说确实很好),但至少指出了解决这个问题的方向。
提前谢谢你!
发布于 2016-08-01 08:15:00
您可以在parentId和timestamp上使用复合索引有效地完成这一任务。您可以创建这样的索引:
r.table('data').indexCreate('parent_timestamp', function(row) {
return [row('parentId'), row('timestamp')];
})这样做之后,您可以找到父母的最早项目,如下所示:
r.table('data')
.between([PARENT, r.minval], [PARENT, r.maxval], {index: 'parent_timestamp'})
.orderBy({index: 'parent_timestamp'})
.nth(0).default(null)https://stackoverflow.com/questions/38682413
复制相似问题