2016-07-31 43 views
1

我已存儲在RethinkDB表中的下列數據結構:加入在rethinkdb

{ 
    id: string, 
    parentId: string, 
    timestamp: number, 
    data: Object 
} 

該數據結構形成一棵樹,它可以用下面的圖來描繪的(白色記錄代表攜帶記錄普通數據時,紅色那些有自己的data屬性等於null表示刪除操作):

Diagram

現在爲表中的所有記錄,我想能夠計算nextRecord。這是迄今爲止最接近的紀錄。任務看似簡單時,只有回指向父一條記錄:

1 => 2 
4 => 9 
5 => 6 
6 => 8 
... 

但它變得更加難以計算這樣的價值,當父記錄是由若干子記錄引用:

2 => 3 
3 => 5 
7 => 11 

在沒有子引用的情況下也是這種情況,在這種情況下結果應該是null(例如,記錄#8沒有子記錄,因此應當返回null)。

所以我並不是要求自己寫查詢(另一方面對我來說真的很棒),但至少指出了我可以找到解決這個問題的方法。

預先感謝您!

回答

1

您可以使用parentIdtimestamp上的複合索引高效完成此操作。您可以創建這樣的指標:

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)