2017-08-20 1 views
0

キーでノードを見つけられず、新しいノードとその間にエッジを追加できません。Gremlin Scala Neo4j:ノードを検索し、新しいノードとエッジを追加する

case class GraphBuilder(movieId: Int, personId: Int) 
// 
val Ident = Key[String]("personId") 
val ItemId = Key[String]("movieId") 
// 
def applyToGraph(it: GraphBuilder): Unit = { 
val thisPerson = graph + ("Person", Ident -> it.personId.asInstanceOf[String]) 
val movies = graph.V.hasLabel("Movie").has(ItemId, it.movieId) 
movies.headOption match { 
    case Some(v) => 
    v --- "likedBy" --> thisPerson // tested with println("yay" + v) 
    case None => println("youre a failure") 
} 
graph.tx.commit() 
} 

しかし、私はプログラム的にこれを実行するたびに、それが正しく、正しくMOVIEIDに基づいて、ムービーの頂点を見つけたが、ありません、thisPersonヴァル経由してグラフに人を追加します:既にグラフ内のムービーノードと、私が使用し"likedBy"エッジを作成しないでください。私もオプションでパターンマッチングなしで試してみましたが、どちらもうまくいきません。

ノードの追加、ノードの追加、追加されたものと見つかったものの間のエッジの追加はどの方法が最適ですか?

答えて

1

私はあなたのスニペットの構文で混乱少しだけど、あなたは、両方の頂点の識別子を持っている必要があるため、次のクエリは、トリックを行う必要があります。

g.V().has("Movie", "movieId", movieId).as("m"). 
    V().has("Person", "personId", personId). 
    addE("likedBy").to("m").iterate() 

人の頂点が「doesnの場合

g.V().has("Movie", "movieId", movieId).as("m"). 
    addV("Person").property("personId", personId). 
    addE("likedBy").to("m").iterate() 

をそして、あなたは人の頂点がすでに存在するかどうかわからない場合:tがまだ存在して

g.V().has("Movie", "movieId", movieId).as("m"). 
    coalesce(
    V().has("Person", "personId", personId) 
    addV("Person").property("personId", personId)). 
    addE("likedBy").to("m").iterate() 
関連する問題