graph-databases - 在 ArangoDB 中以编程方式创建边

标签 graph-databases arangodb foxx nosql

以编程方式在 ArangoDB 中快速创建边的最简单方法是什么?

我想根据公共(public)属性在文档之间创建关系。我希望能够选择一个属性,并为集合 A 中的每个文档创建一条与集合 B 中在等效属性中具有相同值的每个文档的边。

例如,如果我将电子邮件导入到一个集合中,并将人员导入到另一个集合中,我想在电子邮件和集合之间生成边。电子邮件的架构可能如下所示:

{
  "_key":
  "subject":
  "body":
  "from":
  "to":
}

一个人的架构可能如下所示:

{
  "_key":
  "name":
  "email":
}

假设电子邮件中的 fromto 字段中的值对应于我们可以在人员集合中找到的电子邮件地址。

我希望能够将集合、属性和边缘参数作为输入,然后,对于人员集合中的每个文档,为电子邮件集合中具有相同电子邮件地址的每个文档创建一个边缘from 属性作为当前文档的 email 属性。

到目前为止,我认为 Foxx 可能是最好的工具,但我对文档有点不知所措。

最终,我想基于定义边缘的文档之间的共享属性创建完整的 CRUD,包括“upsert”等效项 - 如果边缘已存在则更新边缘,如果不存在则创建边缘。

我知道使用标准 HTTP API 进行单独的 API 调用会太慢,因为我需要在 Arango 中查询集合中的每个文档并返回大量结果。

是否已经有 Foxx 服务可以执行此操作?如果没有,我应该从哪里开始创建一个?

最佳答案

单个 AQL 查询就足够了:

FOR p IN people
    FOR e IN emails
        FILTER p.email == e.from
        INSERT {_from: p._id, _to: e._id} INTO sent

顶点集合 people 中的 email 地址与 emails 顶点的 from 电子邮件地址相匹配收藏。对于每场比赛,一条新边都会插入到边集合已发送中,链接人员和电子邮件记录。

如果两个顶点集合都包含少量文档,则可以在没有索引的情况下执行此查询(例如,在我的测试中,1,000 人和 3,000 封电子邮件大约需要 2 秒)。对于较大的数据集,请确保在 people 中的 email 属性上创建哈希索引,并在 emails 中为 from 创建哈希索引。在我的测试中,它将执行时间减少到大约 30 毫秒。

关于graph-databases - 在 ArangoDB 中以编程方式创建边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926376/

相关文章:

neo4j - 针对 Cypher 子查询运行计算

python - 尝试将数据传输到 arangodb 时数据变得困惑

java - 使用 gremlin 语法时对 Amazon neptune 有任何限制吗?

regex - 为什么 OrientDB 不使用索引来使用 "LIKE"运算符进行搜索?

python - pyArango - 使用指定的 _key 创建边

docker - 带有卷的 Arangodb、Foxx 和 Docker

clojurescript - ArangoDB Foxx 和 Clojure 脚本

Arangodb:模块上下文的概念

graph - 如何在 Gremlin 中链接命令?

javascript - 使用 nodeJS 在 ArangoDB 中保存文档时出错