Объединение запросов Gremlin в Janusgraph - PullRequest
0 голосов
/ 05 мая 2020

Как написать запрос coalesce gremlin для создания ребра в janusgraph? Я создаю node1, а затем node2, а затем создаю границу между node1 и node2. Я хочу, чтобы ребро создавалось таким образом, чтобы даже если node1 / node2 не был создан ранее, он должен создаваться при создании ребра.

Ответы [ 2 ]

4 голосов
/ 05 мая 2020

Вот пример использования двух шагов объединения для создания вершин, если они не существуют, а затем добавления ребра. Обратите внимание, что в этом примере я использовал собственные идентификаторы. Возможно, вам понадобится использовать другую схему с JanusGraph, но это общий шаблон, который вы можете использовать. Есть и другие способы написать это, но, надеюсь, это поможет вам начать.

g.V('v1').fold().coalesce(unfold(),addV('test').property(id,'v1')).
  V('v2').fold().coalesce(unfold(),addV('test').property(id,'v2')).
  addE('myedge').to(V('v1')) 
3 голосов
/ 05 мая 2020

Допустим, есть свойство с именем unique_property, которое однозначно идентифицирует любой узел, а метка узла - node. Допустим, мы хотим добавить край с меткой connects между node1 и node2.

g.V().has('node','unique_property','node1').fold()
     .coalesce(unfold(), __.addV('node').property('unique_property','node1'))
     .as('from_node') 
     .coalesce(__.V().has('node','unique_property','node2'), __.addV('node').property('unique_property','node2'))
     .addE('connects')
     .from('from_node')
     .iterate()
...