Гремлин - Вершина и Край Апсерт в 1 обходе - PullRequest
1 голос
/ 06 апреля 2020

У меня работает upsert Vertex и Edge работают в 2 отдельных обхода. Можно ли объединить обход 2 в 1? Я пытался, но получаю ошибки.

a = self.gV (). Has ('account', 'id', 'account-111111111'). Fold (). Coalesce ( .unfold). (), .addV ('account'). Property (T.id, 'account-111111111')). Has ('customer', 'id', 'cust-111111111'). As _ ('v' ) .V (). Has ('account', 'id', 'account-111111111'). Coalesce ( .inE ('owns'). Where ( .outV (). As _ ('v) ')), .addE (' владеет '). Из _ ( .V (' customer ',' id ',' cust-111111111 ')))

a.next ()

Работает:

Восстановление вершин:

a = gV (). Has ('account', 'id', 'account-111111111'). Fold (). coalesce ( .unfold (), .addV ('account'). property (T.id, 'account-111111111')) a.next ()

Поддержка края:

a = gV (). Has ('customer', 'id', 'cust-111111111'). As _ ('v'). V (). Has ('account', 'id', 'account -111111111). \ coalesce ( .inE ('owns'). where ( .outV (). as _ ('v')), .addE ('owns'). from _ ( .V ('customer', 'id', 'cust-111111111])))

a.next ()

1 Ответ

2 голосов
/ 07 апреля 2020

После некоторого изучения, в вашем примере есть немало вещей, которые не сработают.

Прежде всего, если вы знаете идентификатор вершины или ребра, в действительности нет необходимости проверьте метку или любое другое свойство.

Во-вторых, T.id является идентификатором. Значение 'id' будет свойством с именем 'id'.

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

g.V('account-111111111').
  fold().
  coalesce(__.unfold(),
           __.addV('account').property(T.id, 'account-111111111')).
  coalesce(__.in('owns').hasId('cust-111111111')),
           __.addE('owns').from_(__.V('cust-111111111')) 
...