从csv更新ArangoDB集合

从csv更新ArangoDB集合,arangodb,Arangodb,我刚刚接触ArangoDB,您能告诉我如何执行以下更新吗 我有文档集合,每个文档都有一个属性seen。我想通过以下方式更新csv文件中的现有集合:如果文件中有一行带有\u key的代码已经存在于集合中,我想将csv文件和集合中的值相加,并将集合中的值替换为总和;如果没有带有此类\u键的文档,我只想添加它 据我所知,这对于arangoimp工具来说有点太多了,因为它可以选择替换或忽略Dublicate 你会怎么做 如果您有任何想法,我将不胜感激。正如您所说,从arangoimp工具中要求太多了。如

我刚刚接触ArangoDB,您能告诉我如何执行以下更新吗

我有文档集合,每个文档都有一个属性
seen
。我想通过以下方式更新csv文件中的现有集合:如果文件中有一行带有
\u key
的代码已经存在于集合中,我想将csv文件和集合中的
值相加,并将集合中的值替换为总和;如果没有带有此类
\u键的文档,我只想添加它

据我所知,这对于
arangoimp
工具来说有点太多了,因为它可以选择替换或忽略Dublicate

你会怎么做


如果您有任何想法,我将不胜感激。

正如您所说,从
arangoimp
工具中要求太多了。如果
\u键
不存在,您可以使用它通过
\u键
更新现有记录,替换
seen
属性并创建新文档。但它不支持添加逻辑来总结所看到的值

但是,您可以使用
arangoimp
将您的CSV导入临时集合,并使用AQL查询来完成此操作。让
temp
成为临时收藏,然后
coll
成为您的主要收藏:

FOR doc IN temp
  UPSERT { _key: doc._key }
  INSERT doc
  UPDATE { seen: OLD.seen + doc.seen }
  IN coll

如果需要,您可以选择使用导入文档中的属性替换现有文档,而不是更新或合并(),或者删除末尾的临时文档。

正如您所说,从
arangoimp
工具中要求太多。如果
\u键
不存在,您可以使用它通过
\u键
更新现有记录,替换
seen
属性并创建新文档。但它不支持添加逻辑来总结所看到的值

但是,您可以使用
arangoimp
将您的CSV导入临时集合,并使用AQL查询来完成此操作。让
temp
成为临时收藏,然后
coll
成为您的主要收藏:

FOR doc IN temp
  UPSERT { _key: doc._key }
  INSERT doc
  UPDATE { seen: OLD.seen + doc.seen }
  IN coll

如果需要,您可以选择使用导入文档中的属性替换现有文档,而不是更新或合并(),或者在最后删除临时文档。

非常感谢您的回答。在这里等待的时候,我也有同样的想法,对于一个20万文档的“小”集合来说,效果很好。但后来我尝试对另一个400万文档大小的集合(这次是Edge集合)执行同样的操作,它工作了15分钟,没有任何结果。这在我的例子中太多了。我刚刚发现,如果我获取相同大小的csv,但对于边缘集合和执行相同的查询,执行所需的时间大约要长10倍。可能是因为这类集合的某些功能?临时集合是否具有来自
\u和来自
\u到
属性?由于需要维护额外的边缘索引,边缘集合的成本肯定更高。但是,我不确定10倍的速度是否正常。是的,临时集合和主集合都有3个属性:
\u from
\u to
seed
。不同集合中具有相同边索引的文档具有不同的
\u键。在你看来,如果我能使他们平等,这会有帮助吗?嗯,实际上是有帮助的。我过去常做
UPSERT{{u-from:edge.\u-from,\u-to:edge.\u-to}
这件事,天知道要花多长时间,但当我做
UPSERT{u-key:edge.\u-key}
时,4mil写入需要190秒。我也试着这么做,但是对于文档集合,大约需要160秒,所以我想,不会比这更快了。现在唯一的问题是我应该如何为一对
\u从
-
\u到
生成密钥,但这是另一回事。再次感谢你!非常感谢你的回答。在这里等待的时候,我也有同样的想法,对于一个20万文档的“小”集合来说,效果很好。但后来我尝试对另一个400万文档大小的集合(这次是Edge集合)执行同样的操作,它工作了15分钟,没有任何结果。这在我的例子中太多了。我刚刚发现,如果我获取相同大小的csv,但对于边缘集合和执行相同的查询,执行所需的时间大约要长10倍。可能是因为这类集合的某些功能?临时集合是否具有来自
\u和来自
\u到
属性?由于需要维护额外的边缘索引,边缘集合的成本肯定更高。但是,我不确定10倍的速度是否正常。是的,临时集合和主集合都有3个属性:
\u from
\u to
seed
。不同集合中具有相同边索引的文档具有不同的
\u键。在你看来,如果我能使他们平等,这会有帮助吗?嗯,实际上是有帮助的。我过去常做
UPSERT{{u-from:edge.\u-from,\u-to:edge.\u-to}
这件事,天知道要花多长时间,但当我做
UPSERT{u-key:edge.\u-key}
时,4mil写入需要190秒。我也试着这么做,但是对于文档集合,大约需要160秒,所以我想,不会比这更快了。现在唯一的问题是我应该如何为一对
\u从
-
\u到
生成密钥,但这是另一回事。再次感谢你!