簡介:我正在使用RethinkDB的更改源觀察特定文檔(而不是整個表)上的更改。每個記錄是這樣的:RethinkDB:數組上的實時更改,僅返回新添加
{
"feedback": [ ],
"id": "bd808f27-bf20-4286-b287-e2816f46d434" ,
"projectID": "7cec5dd0-bf28-4858-ac0f-8a022ba6a57e" ,
"timestamp": Tue Aug 25 2015 19:48:18 GMT+00:00
}
我有一個過程,被追加的項目到反饋陣列,以及需要留意的反饋陣列上的變化......然後做一些其他進程(具體地說,只通過websockets廣播最後一項,反饋)。我已將它連接起來,以便它可以監視整個文檔的更新 - 但是,它需要接收完整的文檔,然後獲取反饋數組中的最後一項。這感覺過於沉重,當我需要回來的時候是最後添加的東西。
用於更新文檔當前代碼:
r.table('myTable').get(uuid)
.update({feedback:r.row('feedback').append('message 1')})
.run(conn, callback)(...}
^這將在一分鐘左右的過程中多次運行,加入了最新的消息,「反饋」。
看變化:
r.table('myTable').get(uuid)
.changes()
.run(conn, function(err, cursor){
cursor.each(function(err, row){
var indexLast = row.old_val ? row.old_val.feedback.length : 0,
nextItem = row.new_val.feedback[indexLast];
// ... do something with nextItem
})
})
最後,這裏的問題(2份真):
1:當我更新文件(擴展反饋) ,我是否必須在整個文檔上運行一個update
(如上面的代碼所示),還是可以簡單地附加到反饋數組並完成它?
2:我是這樣做的方式(接收整個文檔,並從反饋數組中取出最後一個元素)唯一的方法來做到這一點?或者,我可以這樣做:
r.table('myTable').get(uuid)
.changes()
.pluck('feedback').slice(8) // <- kicking my ass
.run(conn, function(err, cursor){
cursor.each(function(err, row){
var indexLast = row.old_val ? row.old_val.feedback.length : 0,
nextItem = row.new_val.feedback[indexLast];
// ... do something with nextItem
})
})
過了一段時間我批准答案,但想要說聲謝謝,正是我一直在尋找! – jiveTurkey
我很高興它可以幫助你 – kureikain