如果文档存在,则Rethinkdb替换文档,否则插入文档

时间:2015-10-31 22:10:58

标签: node.js rethinkdb upsert

我想插入一个文件,如果它不存在(找不到client_nr)。 如果存在,请用新值替换整个文档。 唯一的另一个是,client_nr不是主键。主键是rethinkdb数据库创建的默认ID。

我在节点js中尝试了以下代码,但没有任何反应。数据位于变量jsonArray中。我使用for循环遍历整个jsonArray。

知道如何解决这个问题吗?

感谢!!!

for(var Ticker in jsonArray){
    r.db(db).table('trades').filter({client_nr: jsonArray[Ticker].client_nr}).forEach(function(post) {
    return r.branch(
    post.eq(null),
    r.db(db).table('log').insert(jsonArray[Ticker]),
    r.db(db).table('log').replace(jsonArray[Ticker])
     )
    }).run()
}

1 个答案:

答案 0 :(得分:0)

如果client_nr是您的主键,那么这样做会容易得多。我考虑这样做,而不是使用自动生成的ID。这也将强化场上的独特性,这可能是你想要的。

我也对你的例子感到有点困惑,因为你的描述听起来好像你想要插入/替换你正在过滤的同一个表,但是你的例子引用了两个不同的表。

假设您想要使用单个表,这样的事情应该这样做:

TABLE.filter({client_nr: jsonArray[Ticker].client_nr}).replace(function(row) {
  return r(jsonArray[Ticker]).merge(row.pluck('id'));
}).do(function(res) {
  return r.branch(
    res('replaced').add(res('unchanged')).eq(0),
    TABLE.insert(jsonArray[Ticker]),
    res);
})