2016-12-24 4 views
1

現在、私はこのグレムリン/グルーヴィーなコードを持っている:頂点が存在しない場合にのみ頂点を追加する方法と、この単一の横断を他のグラフの突然変異と続けますか?

if(!g.V().has("Number","number","3").hasNext()) { 
    g.addV("Number").property("number","3") 
} 

は、それが複数のトラバースを使用せずに同じ結果を持つことは可能ですか?

私はそれがここ(https://stackoverflow.com/a/33965737/986160)示唆されたものをしようとしたが、それは私がすることはできません

g.V().choose(has("Number","number", "3"), 
     addV("Number").property("number", "3"), 
     has("Number","number", "3") 
    ).as("number") 
    .addV("User").property("uuid","test uuuid") 
    .forEachRemaining(System.out::println); 

(それは数またはユーザー頂点のいずれかを追加しません)私はこれを試してみましたが、それは動作しません。 DSEの1回の取引で別のユーザーを追加して1回のトラバーサルを続けてください:

g.V() 
.has("Number","number", "3") 
.tryNext() 
.orElseGet(
    () -> g.addV("Number") 
      .property("number", "3").next() 
); 

ありがとうございます!

答えて

2

は、残念ながらまだg.coalesce()を持っていませんが、回避策があります:中

gremlin> g = TinkerGraph.open().traversal() 
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard] 
gremlin> g.inject(1).coalesce(V().has("Number", "number", 3), addV("Number").property("number", 3)) 
==>v[0] 
gremlin> g.inject(1).coalesce(V().has("Number", "number", 3), addV("Number").property("number", 3)) 
==>v[0] 
gremlin> g.inject(1).coalesce(V().has("Number", "number", 3), addV("Number").property("number", 3)) 
==>v[0] 
gremlin> g.V().valueMap() 
==>[number:[3]] 
+0

'' '1'''は' ''(1) '' 'トラバーサルのための固有の番号で注入しますか?異なる番号のcreateIfnotExistsが複数ある場合はどうなりますか?私は '' 'g.inject(1).coalesce(V)が(" Number "、" number "、3)、addV(" Number ")プロパティ(" number "、3)を持つことができますか?プロパティ( "number"、4)); '' '?(1).coalesce(V()。has(" Number "、" number "、4)、addV(" Number "または '' 'inject(2)' ''を実行する必要がありますか?ありがとう –

+1

これは、V()。has( "Number"、 "number"、3)が何も出さなくても、トラバーサルを生かし続けるものです。 'g.inject(" michail ")'とすることができます。 –

+0

私は '' 'GraphTraversal traversal = g.inject();' ''のどこかでもできますか?コード内のどこかで '' coalesce() ''を続けますか? –

関連する問題