有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

spring boot Neo4j Apoc在java中获取结果摘要时的情况

嘿,我目前正在编写一个Java应用程序,通过SpringNeo4j驱动程序访问NEO4J。 我有几个带数组的节点。不,我正在尝试编写一个cypher查询,从匹配节点的数组中删除一个元素。如果元素是最后一个,我希望删除完整的节点。为了实现这一点,我使用了apoc.do.when。您可以在下面找到我的查询的简化版本

MATCH (n:NODE)  WHERE "Peter" IN n.NAMES
CALL apoc.do.when(size(n.NAMES) > 1, 'SET n.NAMES = [x IN n.NAMES WHERE x <> "Peter"]', 'DETACH DELETE n') YIELD value
RETURN value

我的查询总体上运行良好,但在我的Java应用程序中不再返回结果摘要。 我以以下方式调用查询:

ResultSummary output = driver.session().run(query.withParameters(params)).consume();

我知道执行查询并删除节点。我通过Neo4J浏览器验证了这一点,但结果摘要显示:

serverInfo=InternalServerInfo{address='localhost:7687', version='Neo4j/3.5.17'}, databaseInfo=InternalDatabaseInfo{name='null'}, queryType=READ_WRITE, counters=null, plan=null, profile=null, notifications=[], resultAvailableAfter=143, resultConsumedAfter=1}
Updates: 0
Delete: 0

因此,如果操作成功,我无法从Java代码中验证。我假设apoc.do.when没有正确地提升查询的结果摘要。有没有办法解决这个问题,或者我需要用第二个查询来验证这个问题


共 (1) 个答案

  1. # 1 楼答案

    您可以修改Cypher查询,以返回一个指示是否发生更新或删除的结果。例如:

    MATCH (n:NODE) WHERE "Peter" IN n.NAMES
    CALL apoc.do.when(
      size(n.NAMES) > 1,
      'SET n.NAMES = [x IN n.NAMES WHERE x <> "Peter"] RETURN "updated" AS res',
      'DETACH DELETE n RETURN "deleted" AS res') YIELD value
    RETURN value.res AS res
    

    然后,Java客户机可以迭代(或流式)生成的记录,并计算更新和删除的次数