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 正确找到电影顶点,但不创建"likedBy"边缘。我也尝试过在选项上没有模式匹配,但这也不起作用。

什么方法最适合查找节点,添加节点,在添加和找到之间添加边缘?

我对代码段中的语法有点困惑,但由于您必须拥有两个顶点的标识符,因此以下查询应该可以解决问题:

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

最新更新