如何快速识别不存在的节点

时间:2018-03-07 18:45:34

标签: neo4j cypher

我有5个标签,每个标签都有一个node_id属性。我在csv文件中获得了一百万个节点ID。现在我如何使用cypher找出5个标签中不存在的节点ID?

1 个答案:

答案 0 :(得分:0)

根据@ DaveBennett的建议,您可以按照以下步骤操作:

  1. 为新标签创建索引(例如Foo):

    CREATE INDEX ON :Foo(node_id);
    
  2. 为所有使用过的Foo创建一个新的node_id节点。如果只有具有5个标签之一的节点具有node_id属性,则可以执行以下操作:

    MATCH (n)
    WHERE EXISTS(n.node_id)
    CREATE (:Foo {node_id: n.node_id});
    

    否则,您可以执行此操作(对于标签L1L5):

    MATCH (n)
    WHERE (n:L1 OR n:L2 OR n:L3 OR n:L4 OR n:L5) AND EXISTS(n.node_id) 
    CREATE (:Foo {node_id: n.node_id});
    
  3. 使用:Foo(node-id)索引查找所有未使用的node-Id值:

    LOAD CSV FROM '...' AS line
    OPTIONAL MATCH (f:Foo {node_id: line[0]})
    WHERE f IS NULL
    RETURN line[0] AS unused;
    
  4. (可选)删除Foo个节点。 (您也可以删除:Foo(node-id)索引(未显示)。

    MATCH (n:Foo)
    DELETE n;