1
votes

I have a Vertex upsert working and an Edge upsert working in 2 separate traversals. Is it possible to combine the 2 into 1 traversal? I have attempted but am receiving errors.

a = self.g.V().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('owns').from_(.V('customer', 'id', 'cust-111111111')))

a.next()

Works:

Vertex Upsert:

a = g.V().has('account', 'id', 'account-111111111').fold().coalesce(.unfold(),.addV('account').property(T.id, 'account-111111111')) a.next()

Edge Upsert:

a = g.V().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
Hi and welcome to StackOverflow. Could you please edit the question to include the error messages that you are seeing?Kelvin Lawrence
Also note that 'id' is not the same as T.idKelvin Lawrence

1 Answers

4
votes

After studying it for a while, there are quite a few things in your example that will not work.

First of all if you know the ID of a vertex or an edge there is really no need to check the label or any other property.

Secondly T.id is an ID. The value 'id' would be a property called 'id'.

From your question it was a bit hard to piece together what you are wanting to do but here is a first go at what I think you intended. If this is not in fact what you wanted please edit the question to make it more clear. Anyway, I hope this helps

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'))