ArangoDB 插入边缘不存在
ArangoDB insert edge doesn't exists
我想在文档集合 C1 和 C3 之间创建独特的边缘。
唯一约束是id和kid。
我使用流 aql 创建它,但我在同一个 id 和 kid 中得到了多个边。
我该如何实现?
抱歉我的英语不好:)
for i in C1
filter i.id != null and i.id != ''
let exist = first(
for c in C2
filter i.id == c.id and i.kid == c.kid
limit 1
return c
)
filter exist == null
let result = first(
for h in C3
filter i.kid == h.kid
limit 1
return h
)
insert{_from:i._id, _to:result._id, id:i.id, kid:i.kid} INTO C2
我的英文也不太好^)!
但我想,我看到你在哪里犯了错误。
首先,对于您的两个 collection,您可以使用此代码:
LET data = [
{"parent":{"ID":"YOU_MUST_WRITE_HERE_ID_C1"},"child":{"KID":"YOU_MUST_WRITE_HERE_KID_C3"}},
{"parent":{"ID":"YOU_MUST_WRITE_HERE_NEXT_ID_C1"},"child":{"KID":"YOU_MUST_WRITE_HERE_NEXT_KID_C3"}}
]
FOR rel in data
LET parentId = FIRST(
FOR c IN C1
FILTER c.GUID == rel.parent.ID
LIMIT 1
RETURN c._id
)
LET childId = FIRST(
FOR c IN C3
FILTER c.GUID == rel.child.KID
LIMIT 1
RETURN c._id
)
FILTER parentId != null AND childId != null
INSERT { _from: childId, _to: parentId } INTO C2
RETURN NEW
希望对你有所帮助
其次 - 为什么在此片段中使用 С2 collection?
let exist = first(
for c in C2
我想在文档集合 C1 和 C3 之间创建独特的边缘。
唯一约束是id和kid。
我使用流 aql 创建它,但我在同一个 id 和 kid 中得到了多个边。
我该如何实现?
抱歉我的英语不好:)
for i in C1
filter i.id != null and i.id != ''
let exist = first(
for c in C2
filter i.id == c.id and i.kid == c.kid
limit 1
return c
)
filter exist == null
let result = first(
for h in C3
filter i.kid == h.kid
limit 1
return h
)
insert{_from:i._id, _to:result._id, id:i.id, kid:i.kid} INTO C2
我的英文也不太好^)! 但我想,我看到你在哪里犯了错误。 首先,对于您的两个 collection,您可以使用此代码:
LET data = [
{"parent":{"ID":"YOU_MUST_WRITE_HERE_ID_C1"},"child":{"KID":"YOU_MUST_WRITE_HERE_KID_C3"}},
{"parent":{"ID":"YOU_MUST_WRITE_HERE_NEXT_ID_C1"},"child":{"KID":"YOU_MUST_WRITE_HERE_NEXT_KID_C3"}}
]
FOR rel in data
LET parentId = FIRST(
FOR c IN C1
FILTER c.GUID == rel.parent.ID
LIMIT 1
RETURN c._id
)
LET childId = FIRST(
FOR c IN C3
FILTER c.GUID == rel.child.KID
LIMIT 1
RETURN c._id
)
FILTER parentId != null AND childId != null
INSERT { _from: childId, _to: parentId } INTO C2
RETURN NEW
希望对你有所帮助
其次 - 为什么在此片段中使用 С2 collection?
let exist = first(
for c in C2