【问题标题】:Cannot merge the following node because of null property value for 'src': (:Node {src: null})由于 'src' 的属性值为空,无法合并以下节点: (:Node {src: null})
【发布时间】:2021-06-14 07:31:43
【问题描述】:

我是 neo4j 的新手,我想编写一个读取 .json 格式的查询并创建一个节点图。下面是我的查询,它在没有 null 属性的文件中成功,当我的 json 文件中有 null 属性时不成功。

CALL apoc.load.json("file:/graph-phase1-labelled.json") YIELD value  

UNWIND value.nodes as nodes

UNWIND nodes.properties as prop

MERGE(n1:Node{src:prop.sourceIP})
 
MERGE(n2:Node{dst:prop.destIP})  

WITH n1,n2,prop

MERGE (n1)-[:CONNECTED_TO]->(n2)

RETURN n1,n2,prop

有人知道什么可以解决这个问题吗?

【问题讨论】:

    标签: json neo4j null


    【解决方案1】:

    在 Neo4j 中创建属性时,您不能有空属性。

    有很多方法可以解决这个问题,但获取一些数据的快速选择可能是使用coalesce() 函数,它将使用它命中的第一个非空值,例如

    CALL apoc.load.json("file:/graph-phase1-labelled.json") YIELD value
    UNWIND value.nodes as nodes
    UNWIND nodes.properties as prop
    MERGE(n1:Node{src:coalesce(prop.sourceIP,"No IP")})
    MERGE(n2:Node{dst:coalesce(prop.destIP, "No IP"})
    WITH n1,n2,prop
    MERGE (n1)-[:CONNECTED_TO]->(n2)
    RETURN n1,n2,prop
    

    【讨论】:

    • 请注意,您可以为该属性创建一个传递null 的节点,这与完全省略该属性相同(因为正如您所说的那样,没有null 这样的东西是真的财产的价值)。但是您不能使用空属性值进行 MERGE。
    【解决方案2】:

    感谢您的回答,问题是我试图在其上构建图表的转储具有一些空属性,我不得不忽略它们以继续处理其余节点。 “无 IP”不起作用,但我设法解决了它
    通过以下:

        call apoc.load.json("file:/graph-phase1-labelled1.json") yield value
        unwind value.nodes as nodes
        unwind nodes.properties as prop 
        with prop where prop.sourceIP is not null
        with prop where prop.destIP is not null
        merge(n1:Node{src:prop.sourceIP}) 
        merge(n2:Node{dest:prop.destIP}) 
        with prop,n1,n2
        merge (n1)-[ :connected_to]->(n2)
        return n1,n2,prop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 2018-01-12
      • 2020-09-06
      • 2016-09-02
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多