我有一個.itemId
來自第三方,不是由我生成的。如何通過任意屬性在rethinkdb(reql)中插入文檔?
我需要在數據庫中查找它並更新或插入它,如果它不存在。
我一直使用從食譜這個例子嘗試:https://www.rethinkdb.com/docs/cookbook/javascript/#manipulating-documents
const res = await this.r.table('products').filter({itemId: item.itemId})
.limit(1)
.replace(doc => {
return this.r.branch(
doc.eq(null),
this.r.expr(item).merge({created_at: this.r.now()}),
doc.merge(item).merge({updated_at: this.r.now()})
)
}, {
returnChanges: true
}).run(this.conn);
if (res.replaced) {
return res.changes[0].new_val;
} else {
return item; // doc was never inserted as everything in `res` is `0`.
}
res.changes
如果文檔不存在,是不確定的,如果我搜索ID後,是不是在數據庫中。它從未插入。
有沒有一種方法可以簡化upsert()
給定一個對象的任意屬性?
'{... item,created_at:this.r.now()}, ^^^ SyntaxError:意外的標記...' – chovy
既沒有示例工作。我改變了傳播到'Object.assign()'現在它會拋出一個錯誤關於缺少返回語句。 'ReqlDriverCompileError:匿名函數返回undefined。你忘了回報嗎?' – chovy
什麼都不會更新。僅插入。 – chovy