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

Neo4j Apoc在java中获取结果摘要时的情况,java,spring-boot,neo4j,spring-data-neo4j,neo4j-apoc,Java,Spring Boot,Neo4j,Spring Data Neo4j,Neo4j Apoc,嘿,我目前正在编写一个Java应用程序,通过SpringNeo4j驱动程序访问NEO4J。 我有几个带数组的节点。不,我正在尝试编写一个cypher查询,从匹配节点的数组中删除一个元素。如果元素是最后一个,我希望删除完整的节点。为了实现这一点,我使用了apoc.do.when。您可以在下面找到我的查询的简化版本 MATCH (n:NODE) WHERE "Peter" IN n.NAMES CALL apoc.do.when(size(n.NAMES) > 1, 'S

嘿,我目前正在编写一个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
我知道执行查询并删除节点。我通过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
无法正确提升查询的结果摘要。是否有任何方法可以修复此问题,或者我是否需要使用第二个查询来验证此问题?

您可以修改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
匹配(n:NODE),其中n个名称中的“Peter”
什么时候打电话给apoc.do(
尺寸(名称)大于1,
'SET n.NAMES=[x IN n.NAMES,其中x“Peter”]返回“updated”AS res',
'分离删除n返回“已删除”作为res')产生值
返回value.res作为res

然后,您的Java客户端可以迭代(或流式传输)结果记录,并计算更新和删除的次数。

apoc过程无法正确升级结果摘要。如果你愿意的话,你可以使用普通密码来完成这个简单的操作
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