RethinkDB:​​如何在插入

时间:2015-10-08 15:05:52

标签: node.js rethinkdb

我想使用NodeJS和RethinkDB批量插入数据数组,但我不想插入现有记录(名称和值已经有记录,我不想在主要文件上重复检查key id)。

[
  {name:"Robert", value:"1337"},
  {name:"Martin", value:"0"},
  {name:"Oskar", value:"1"}
]

如果上述任何值已存在,请勿插入,但请更新"值"。

我当前的工作解决方案是我循环遍历数组并首先使用过滤器检查它是否存在,如果没有,我插入它。但它在10.000条记录上非常缓慢。

2 个答案:

答案 0 :(得分:0)

我认为我们在RethinkDB中没有这种概念。我试着更多地阅读文档。要插入新文档,请使用insert更新字段,使用update替换为全新文档,使用replace(主键不会更改)...所以我认为在RethinkDB中不可能。

以下是一些可以让它运行得更快的方法:

  • 创建复合索引包含以下两个字段:namevalue 然后使用该索引检查是否存在而不是使用filter
  • 生成您自己的id字段,而不是让RethinkDB生成它。因此,您知道主键,并使用它来查找文档get,这将非常快。

答案 1 :(得分:0)

我在RethinkDB项目中有类似的要求,但是在这种情况下,正在检查主键的重复项,它也是自定义的而不是自动生成的。

您可以执行async.seriesasync.waterfall两步检查。首先从数组中选择一个对象,然后过滤数据库以获取当前对象的名称 - 值对。如果结果为null,则它是唯一的。如果没有,您的预先存在的记录具有相同的详细信息。

根据结果,您可以将控件传递给下一步,该步骤将插入新文档或更新现有文档。如果你在async.waterfall中使用一个标志会更简单。