0
我試圖根據branch
條件對數組字段進行簡單的upsert操作。但是branch
不接受reql表達式作爲參數,我得到錯誤Expected type SELECTION but found DATUM
。如何使用RethinkDB中的分支有條件地更新項目
這可能是我錯過的一些顯而易見的事情,但我無法在任何地方找到任何工作示例。
樣品來源:
var userId = 'userId';
var itemId = 'itemId';
r.db('db').table('items').get(itemId).do(function(item) {
return item('elements').default([]).contains(function (element) {
return element('userId').eq(userId);
}).branch(
r.expr("Element already exist"),
//Error: Expected type SELECTION but found DATUM
item.update({
elements: item('elements').default([]).append({
userId: 'userId'
})
})
)
})
非常感謝@ sam-hughes。我仍然懷疑這樣的交易是否可以以最佳方式完成。據我所知 - 它需要做兩個截然不同的非原子請求或總是進行更新。 – xb1itz
@ xb1itz - 更新將以最佳方式進行。如果更新返回相同的文檔,保持不變,則不會寫入任何內容。 RethinkDB專門將新版本的文檔與舊版本進行比較。如果你對此感到緊張,我想你也可以使用r.error來中止更新。 –