Край вставки ArangoDB не существует - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу создать уникальный край между коллекцией документов 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

1 Ответ

0 голосов
/ 16 апреля 2019

Мой английский тоже не очень хороший ^)!Но я думаю, что вижу, где ты допустил ошибку.Во-первых, для ваших двух коллекций вы можете использовать этот код:

    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
...