仅在也可以添加边的情况下,如何添加新的顶点?

问题描述 投票:0回答:1

我需要添加带有边的新顶点。我的代码是这样的:

g.V().addV("Vertex").addE("MyEdge").to(V().has("OtherVertex", "name", "test"))

如果V().has("OtherVertex", "name", "test")返回顶点,则一切正常。我的问题是,如果OtherVertex不存在,Gremlin将添加没有边的新顶点。仅当我可以创建Edge时,我才想添加新的顶点。我正在使用Gremlin服务器进行开发。我的猜测是,我可以尝试使用Transactions,但是我不确定AWS Neptune现在是否支持它。

有任何建议吗?谢谢。


[我认为,避免交易,我意识到我可以先选择OtherVertex。如果不存在,查询将不会创建新的顶点:

g.V().has("OtherVertex", "name", "test").as('t').addV("Vertex").as('v').addE("MyEdge").from('v').to('t')
tinkerpop3 amazon-neptune tinkergraph
1个回答
1
投票

正如您所写,这是正确的方法:

g.V().has("OtherVertex", "name", "test").as('t').
  addV("Vertex").as('v').addE("MyEdge").from('v').to('t')

我只想添加一些与您的最初尝试有关的内容:

g.V().addV("Vertex")

我认为您只是想开始于:

g.addV("Vertex")

如果您使用前者,则会产生一些意想不到的问题:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.V().addV('person')
gremlin> g.V().addV('person')
gremlin> g
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

请注意,对于空白图表,不会添加任何内容。这是因为V()不返回任何顶点,因此管道中没有可触发addV()的东西。假设您有一些数据:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().addV('person')
==>v[13]
==>v[14]
==>v[15]
==>v[16]
==>v[17]
==>v[18]
gremlin> g.V().addV('person')
==>v[19]
==>v[20]
==>v[21]
==>v[22]
==>v[23]
==>v[24]
==>v[25]
==>v[26]
==>v[27]
==>v[28]
==>v[29]
==>v[30]

现在,还有一个更严重的问题,因为我们为每个现有顶点添加一个顶点,因为V()现在在每次执行时返回图形中的所有顶点。

作为最后的说明,请参见此Gremlin Recipe,了解进行获取或创建类型操作的方式,因为它与您现在正在执行的这种条件突变有关。

© www.soinside.com 2019 - 2024. All rights reserved.