Случай Neo4j Apoc при получении сводки результатов в java

#java #spring-boot #neo4j #spring-data-neo4j #neo4j-apoc

#java #весенняя загрузка #neo4j #spring-data-neo4j #neo4j-apoc

Вопрос:

Эй, в настоящее время я пишу Java-приложение, которое обращается к NEO4J через драйвер Spring Neo4J. У меня есть пара узлов с массивами. Нет, я пытаюсь написать шифровальный запрос, который удаляет элемент из массива соответствующего узла. Если бы элемент был последним, я бы с удовольствием удалил весь узел. Для достижения этого я использую 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
  

Поэтому я не могу проверить из своего Javacode, прошла ли операция успешно. Я предполагаю, что apoc.do.when это неправильно продвигает сводку результатов запроса. Есть ли способ исправить это или мне нужно проверить это с помощью второго запроса?

Комментарии:

1. процедуры apoc неправильно продвигают сводку результатов. Возможно, вы могли бы использовать простой шифр для этой простой операции, если хотите

Ответ №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-клиент может перебирать (или передавать) результирующие записи и подсчитывать количество обновлений и удалений.