[英]How can I create edges within a collection programmatically in ArangoDB?
[英]Programmatically creating edges in ArangoDB
以編程方式在ArangoDB中快速創建邊的最簡單方法是什么?
我想基於一個公共屬性在文檔之間創建關系。 我希望能夠選擇一個屬性,對於集合A中的每個文檔,為集合B中的每個文檔創建一條在等效屬性中具有相同值的邊。
例如,如果我已經將電子郵件導入到一個集合中並且將人員導入了另一個集合中,那么我想在電子郵件和集合之間生成邊緣。 電子郵件的架構可能如下所示:
{
"_key":
"subject":
"body":
"from":
"to":
}
一個人的模式可能看起來像這樣:
{
"_key":
"name":
"email":
}
假設電子郵件中from
和to
字段中的值對應於我們可能在people集合中找到的電子郵件地址。
我希望能夠將集合,屬性和邊線參數作為輸入,然后,對於人員集合中的每個文檔,在電子郵件集合中的每個文檔中,在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
該email
的頂點集合地址people
將與匹配from
該電子郵件地址emails
頂點集合。 對於每次匹配,都會在sent
的邊緣集合中插入一個新的邊緣,從而將人員和電子郵件記錄鏈接在一起。
如果兩個頂點集合都包含少量文檔,則可以在沒有索引的情況下執行此查詢(例如,在我的測試中,1,000個人和3,000電子郵件花費了大約2秒鍾)。 對於較大的數據集,請確保在email
屬性上的people
創建哈希索引,並在emails
from
上創建哈希索引。 在我的測試中,它將執行時間減少到大約30ms。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.