#graph #gremlin #tinkerpop
Вопрос:
Как избежать дублирования edge
между двумя вершинами в Gremlin apache Tinker pop
?
A ->(has) -> B
край с одной и той же меткой HAS
не должен дублироваться.
Ответ №1:
Один простой способ обеспечить уникальность-использовать составной идентификатор для каждого ребра, состоящий из идентификатора исходной вершины, метки ребра и идентификатора целевой вершины. Это гарантировало бы, что попытка добавить еще одно ребро между двумя вершинами с одинаковой меткой приведет к ошибке (поскольку каждая вершина и ребро в TinkerPop должны иметь уникальный идентификатор).
gremlin> g.addV('vertex').property(id,'v1').as('a').
... addV('vertex').property(id,'v2').as('b').
... addE('HAS').property(id,'v1-HAS-v2').from('a').to('b')
==>e[v1-HAS-v2][v1-HAS->v2]
gremlin> g.addE('HAS').property(id,'v1-HAS-v2').from(V('v1')).to(V('v2'))
Edge with id already exists: v1-HAS-v2
Type ':help' or ':h' for help.
Display stack trace? [yN]N