2017-08-20 76 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() 
} 

但每次我編程方式運行,這一次,它正確地添加人通過thisPerson VAL圖,正確認定基礎上,movieId電影頂點,但不不創建「likesBy」邊緣。我也試過沒有模式匹配的選項,但這也不起作用。

什麼方法最好找到節點,添加節點,在添加和找到之間添加邊緣?

回答

1

我有點在你的代碼片段語法混亂,但因爲你必須有兩個頂點的標識,下面的查詢應該做的伎倆:

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

如果對方沒有按頂點」牛逼還不存在:

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

如果你不知道這個人頂點是否已經存在與否:

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