首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加入rethinkdb

加入rethinkdb
EN

Stack Overflow用户
提问于 2016-07-31 09:03:18
回答 1查看 88关注 0票数 1

我在RethinkDB表中存储了以下数据结构:

代码语言:javascript
复制
{
   id: string,
   parentId: string,
   timestamp: number,
   data: Object
}

这种数据结构形成了一棵树,它可以用以下图表来描述(白色记录表示普通的数据携带记录,红色记录的data属性等于表示删除操作的null ):

现在,对于表中的每一条记录,我希望能够计算nextRecord。这是时间上与当前记录最近的记录。当只有一条记录指向父级时,任务看起来很简单:

代码语言:javascript
复制
1 => 2
4 => 9
5 => 6
6 => 8
...

但是,当父记录被几个子记录引用时,计算这样的值变得更加困难:

代码语言:javascript
复制
2 => 3
3 => 5
7 => 11

如果没有子引用,则结果应该是null (例如,记录#8没有子记录,因此应该返回null )。

因此,我并不要求编写查询本身(另一方面,这对我来说确实很好),但至少指出了解决这个问题的方向。

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 08:15:00

您可以在parentIdtimestamp上使用复合索引有效地完成这一任务。您可以创建这样的索引:

代码语言:javascript
复制
r.table('data').indexCreate('parent_timestamp', function(row) {
  return [row('parentId'), row('timestamp')];
})

这样做之后,您可以找到父母的最早项目,如下所示:

代码语言:javascript
复制
r.table('data')
 .between([PARENT, r.minval], [PARENT, r.maxval], {index: 'parent_timestamp'})
 .orderBy({index: 'parent_timestamp'})
 .nth(0).default(null)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38682413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档