0
我試圖做的是以下幾點:Rethinkdb創建如果不存在
- 檢查是否有過濾條件的記錄存在
- 如果是的話,什麼也不做
- 如果沒有,用一些默認設置創建它。
現在我可以用2個查詢做到這一點:
function ensureDocumentExists(connection, criteria, defaults) {
return r.table('tbl')
.filter(criteria)
.coerceTo('array') // please correct me if there's a better way
.run(connection)
.then(([record]) => {
if (record) {
return Promise.resolve() // Record exists, we are good
} else {
return r.table('tbl') // Record is not there we create it
.insert(defaults)
.run(connection)
}
})
}
但事實上,r.branch
和r.replace
存在,建議我認爲這是有可能在單次運行。是嗎?我想是這樣的:
function ensureDocumentExists(connection, criteria, defaults) {
return r.table('tbl')
.filter(criteria)
.replace(doc => r.branch(
r.exists(doc), // If doc exists (I'm just making this up)
doc, // Don't touch it
defaults // Else create defaults
)).run(connection)
}
但我不知道,如果取而代之的是這個正確的方法,也沒有想法如何檢查,如果給定行存在。