Проверка идемпотентности в Neo4J - PullRequest
0 голосов
/ 07 апреля 2020

Кто-нибудь знает, как вставить в Neo4J на основе существующих данных? Это часть приема данных.

Например, в neo4j уже есть узел с атрибутом updatedAt. При получении нового события pubsub для получения данных мне нужно проверить атрибут updatedAt как входящих данных, так и существующего узла в neo4j и решить, какие данные необходимо отбросить.

В конце концов, neo4j должен иметь узел с самым последним значением updatedAt.

Есть ли другой способ, кроме триггеров, APO C?

Пожалуйста, помогите. Я действительно новичок в Neo4j. Спасибо

1 Ответ

1 голос
/ 07 апреля 2020

Я думаю, что вы ищете Cypher MERGE запрос, а точнее MERGE запрос с ON CREATE и ON MATCH. Например:

MERGE (n:TYPE_OF_NODE { id: 'ID_OF_NODE_TO_BE_FOUND' })
ON CREATE SET 
    n.createdAt = INPUT_DATE,
    .../* Set other attributes if needed */
ON MATCH SET n.updatedAt = 
    CASE WHEN n.updatedAt < INPUT_DATE THEN INPUT_DATE ELSE n.updatedAt END,
    ... /* Set other attributes if needed */
RETURN n

Приведенный выше запрос проверяет, существует ли узел данного типа TYPE_OF_NODE и с id, равным ID_OF_NODE_TO_BE_FOUND . Под INPUT_DATE я имею в виду некоторую дату, которая была получена вместе с событием для загрузки данных.

  1. Если узел не существует, он будет создан и некоторые атрибуты будут установлены ( см ON CREATE SET).
  2. Если он существует, он будет обновлен (см. ON MATCH SET). В частности, атрибут updateAt будет установлен на более позднее значение, и для этого я использовал оператор CASE.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...