Neo4J中的幂等性检查

问题描述 投票:0回答:1

有人知道如何根据现有数据插入Neo4J吗?这是数据摄取的一部分。

例如,neo4j中已经存在一个具有属性updatedAt的节点。每当接收到要接收数据的新pubsub事件时,我都需要检查传入数据和neo4j中现有节点的updatedAt属性,并确定需要丢弃哪些数据。

最后,neo4j应该有一个具有最新updatedAt值的节点。

除了触发器,APOC还有其他方法吗?

请帮助。我真的是Neo4j的新手。谢谢

neo4j
1个回答
0
投票

[我认为您正在寻找的是Cypher MERGE查询,更确切地说是MERGEON CREATEON 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_NODEid等于ID_OF_NODE_TO_BE_FOUND的节点。在[[INPUT_DATE之前,我指的是某个接收到的日期以及一个摄取数据的事件。

    如果节点不存在,将创建该节点并设置一些属性(请参阅ON CREATE SET)。
  1. 如果存在,则会进行更新(请参见ON MATCH SET)。具体来说,updateAt属性将设置为后来的值,为此,我使用了CASE语句。
© www.soinside.com 2019 - 2024. All rights reserved.