以编程方式在 ArangoDB 中创建边
Programmatically creating edges in ArangoDB
以编程方式在 ArangoDB 中快速创建边的最简单方法是什么?
我想基于共同属性在文档之间创建关系。我希望能够 select 一个属性,并且对于集合 A 中的每个文档,为集合 B 中在等效属性中具有相同值的每个文档创建边。
例如,如果我将电子邮件消息导入一个集合,将人员导入另一个集合,我想在电子邮件和集合之间生成边。电子邮件的架构可能如下所示:
{
"_key":
"subject":
"body":
"from":
"to":
}
一个人的架构可能如下所示:
{
"_key":
"name":
"email":
}
假设电子邮件中 from
和 to
字段中的值对应于我们可能在人员集合中找到的电子邮件地址。
我希望能够将集合、属性和边缘参数作为输入,然后,对于人员集合中的每个文档,为电子邮件集合中具有相同电子邮件的每个文档创建一个边缘from
属性中的地址作为当前文档的 email
属性。
到目前为止,我认为 Foxx 可能是最好的工具,但文档让我有点不知所措。
最终,我想基于定义边缘的文档之间的共享属性创建一个完整的 CRUD,包括一个 "upsert" 等价物——如果边缘已经存在则更新它,如果不存在则创建它。
我知道使用标准 HTTP API 对单个 API 调用执行此操作会太慢,因为我需要查询 Arango 以获取集合中的每个文档并且 return 非常多的结果。
是否已经有执行此操作的 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
电子邮件地址匹配。对于每个匹配项,都会将新边插入到边集合 sent
中,链接人员和电子邮件记录。
如果两个顶点集合都包含少量文档,则可以在没有索引的情况下执行此查询(例如,在我的测试中,1,000 个人和 3,000 封电子邮件花费了大约 2 秒)。对于较大的数据集,请确保在 people
中的 email
属性上创建哈希索引,并在 emails
中的 from
上创建哈希索引。它在我的测试中将执行时间减少到大约 30 毫秒。
以编程方式在 ArangoDB 中快速创建边的最简单方法是什么?
我想基于共同属性在文档之间创建关系。我希望能够 select 一个属性,并且对于集合 A 中的每个文档,为集合 B 中在等效属性中具有相同值的每个文档创建边。
例如,如果我将电子邮件消息导入一个集合,将人员导入另一个集合,我想在电子邮件和集合之间生成边。电子邮件的架构可能如下所示:
{
"_key":
"subject":
"body":
"from":
"to":
}
一个人的架构可能如下所示:
{
"_key":
"name":
"email":
}
假设电子邮件中 from
和 to
字段中的值对应于我们可能在人员集合中找到的电子邮件地址。
我希望能够将集合、属性和边缘参数作为输入,然后,对于人员集合中的每个文档,为电子邮件集合中具有相同电子邮件的每个文档创建一个边缘from
属性中的地址作为当前文档的 email
属性。
到目前为止,我认为 Foxx 可能是最好的工具,但文档让我有点不知所措。
最终,我想基于定义边缘的文档之间的共享属性创建一个完整的 CRUD,包括一个 "upsert" 等价物——如果边缘已经存在则更新它,如果不存在则创建它。
我知道使用标准 HTTP API 对单个 API 调用执行此操作会太慢,因为我需要查询 Arango 以获取集合中的每个文档并且 return 非常多的结果。
是否已经有执行此操作的 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
电子邮件地址匹配。对于每个匹配项,都会将新边插入到边集合 sent
中,链接人员和电子邮件记录。
如果两个顶点集合都包含少量文档,则可以在没有索引的情况下执行此查询(例如,在我的测试中,1,000 个人和 3,000 封电子邮件花费了大约 2 秒)。对于较大的数据集,请确保在 people
中的 email
属性上创建哈希索引,并在 emails
中的 from
上创建哈希索引。它在我的测试中将执行时间减少到大约 30 毫秒。