【问题标题】:ArangoDB insert edge doesn't existsArangoDB 插入边缘不存在
【发布时间】:2019-04-02 10:24:56
【问题描述】:

我想在文档集合 C1 和 C3 之间创建独特的边缘。
唯一的约束是 idkid
我使用流 aql 来创建它,但我在同一个 idkid 中获得了多个优势。
我怎样才能实现它? 对不起我的英语不好:)

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

【问题讨论】:

  • 如果 id 和 Kid 的组合是唯一的(正如您在帖子中提到的那样),那么 C1 和 C3 之间的简单连接应该可以满足您的需求。如果你得到重复,这意味着 id 和 Kid 本身不足以是唯一的,你要么需要使用不同的更独特的属性,要么你需要先清理 c1 和 c3。

标签: arangodb


【解决方案1】:

我的英语也不是很好^)! 但我想,我知道你在哪里犯了错误。 首先,对于您的两个集合,您可以使用以下代码:

    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集合?

let exist = first(
    for c in C2

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多