Возврат измененной (по apoc.trigger) версии узла вместо оригинальной - PullRequest
0 голосов
/ 30 октября 2019

Я использую драйвер болта python для создания узлов в базе данных neo4j. Эти узлы изменяются функциями apoc.trigger. И я хочу, чтобы возвращаемый BoltStatementResult содержал измененную версию этих узлов.

Это то, что я тестировал до сих пор:

  1. Мои триггеры работают, как и ожидалось. Сохраненные узлы изменены правильно.
  2. Я пробовал фазы «до» и «после».
  3. Я установил функции триггера для возврата измененной версии.
  4. Iнаписал второй запрос, чтобы получить новый и обновленный узел базы данных. Но эта опция довольно небезопасна, так как не имеет уникального идентификатора.

Моя триггерная функция:

CALL apoc.trigger.add(
    'onCreateNodeAddMetadata',
    'UNWIND {createdNodes} AS n
     SET n.uid = apoc.create.uuid(), n.timestamp = timestamp() RETURN n',
    {phase: 'before'}
)

Я ожидаю, что возвращаемое значение моего session.write_transaction будет содержатьдобавленные свойства.

1 Ответ

0 голосов
/ 31 октября 2019

В качестве безопасного обходного пути (но см. Предостережение ниже) запрос Cypher в вашем write_transaction может вернуть собственный идентификатор созданного узла (например, RETURN ID(n)).

Затем, до тех пор, пока вы знаете, что узел не был удален , вы можете выполнить для него запрос с этим идентификатором (в этом примере myID содержит значение идентификатора и передается как параметр ):

MATCH (n) WHERE ID(n) = $myId
...

Если узел можно удалить, прежде чем искать его по собственному идентификатору, этот метод небезопасен, поскольку neo4j может переназначить собственный идентификаторудаленный узел к другому вновь созданному узлу.

...