首页 > 解决方案 > Scala / Neo4J - 删除/删除节点之间的关系路径并返回 true 或 false 作为结果

问题描述

我试图通过它们的 ID 删除两个特定节点之间的关系。我尝试了以下方法:

def deleteRelationship(nodeAID: String, nodeBID: String)(implicit neoFormat: NeoFormat[Node]) : Future[Boolean] = {
    val txn = storeAPI.NeoTransaction()
    val deleteQuery =
      s"""
         | MATCH relationship = (a: $NODE_A {id: "$NodeAID"})-[r]-(b: $NODE_B {id: "$NodeBID"})
         | DELETE r
       """.stripMargin
    txn.querySingle(deleteQuery).flatMap {
      result =>
        txn.commit().map (_ => true)
    }.recoverWith {
      case e: Exception =>
        logger.error(s"Error during deleteRelationship", e)
        txn.rollback().map{_ => false}
    }
 }

我正在尝试删除两个特定节点之间的关系。当我尝试运行它时,该方法返回 false。我怀疑它与查询有关,而不是与 scala 方法有关,但无论如何我已经包含了它。

任何建议都会非常有帮助。

标签: scalaneo4jrelationship

解决方案


txn.querySingle(deleteQuery)确实期待一个结果。在原始方法中,没有按设计返回结果。但是,正因为如此,它跳过了带有 the 的块,txn.commit().map(_ => true)因此永远不会返回 true。

添加RETURN r到我的查询的末尾提供txn.querySingle(deleteQuery)了一个结果,因此达到了txn.commit().map(_ => true).

我确信有一种更好的方法可以不依赖DELETE查询结果,但这暂时解决了我的问题。

请随时添加任何更好的建议。如果提供建议,我会选择最佳答案。


推荐阅读