【问题标题】:Joins in rethinkdb加入rethinkdb
【发布时间】:2016-07-31 09:03:18
【问题描述】:

我在 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)。

所以我不是要求编写查询本身(另一方面,这对我来说真的很棒),但至少指出我可以找到解决这个问题的方向。

提前谢谢你!

【问题讨论】:

    标签: rethinkdb


    【解决方案1】:

    您可以使用parentIdtimestamp 上的复合索引有效地做到这一点。您可以这样创建索引:

    r.table('data').indexCreate('parent_timestamp', function(row) {
      return [row('parentId'), row('timestamp')];
    })
    

    完成后,您可以像这样找到父级 PARENT 的最早项目:

    r.table('data')
     .between([PARENT, r.minval], [PARENT, r.maxval], {index: 'parent_timestamp'})
     .orderBy({index: 'parent_timestamp'})
     .nth(0).default(null)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2015-07-20
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多