【问题标题】:Create doesn't make all nodes and relationships appear创建不会使所有节点和关系出现
【发布时间】:2020-04-12 20:49:01
【问题描述】:

我刚刚下载并安装了 Neo4J。现在我正在使用一个看起来像这样的简单 csv:

所以首先我使用它来合并该文件的节点:

LOAD CSV WITH HEADERS FROM 'file:///Athletes.csv' AS line
MERGE(Rank:rank{rang: line.Rank})
MERGE(Name:name{nom: line.Name})
MERGE(Sport:sport{sport: line.Sport})
MERGE(Nation:nation{pays: line.Nation})
MERGE(Gender: gender{genre: line.Gender})
MERGE(BirthDate:birthDate{dateDeNaissance: line.BirthDate})
MERGE(BirthPlace: birthplace{lieuDeNaissance: line.BirthPlace})
MERGE(Height: height{taille: line.Height})
MERGE(Pay: pay{salaire: line.Pay})

这会为该文件创建一些约束:

CREATE CONSTRAINT ON(name:Name) ASSERT name.nom IS UNIQUE
CREATE CONSTRAINT ON(rank:Rank) ASSERT rank.rang IS UNIQUE

然后我想显示运动员居住在哪个国家。为此我使用:

Create(name)-[:WORK_AT]->(nation)

但我有那个出现:

我想知道为什么我有这个。

我提前感谢任何花时间帮助我的人。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    想到几个问题:

    1. 如果您的 CREATE 子句是您的第一个查询的一部分:因为 CREATE 子句使用变量名称 namenation,而您的 MERGE 子句使用NameNation(它们的大小写不同)——CREATE 子句只会创建新节点,而不是使用NameNation 节点。

    2. 如果您的 CREATE 子句不是您的第一个查询的一部分:您的 CREATE 子句只会创建新节点(因为变量名称,即使假设它们具有相同的大小写,是本地查询,不存储在数据库中)。

    解决方法:可以在第一个查询的末尾加上这个子句:

        CREATE (Name)-[:WORK_AT]->(Nation)
    

    【讨论】:

      【解决方案2】:

      是的,同意@cybersam,这是“名称”和“国家”变量区分大小写的问题。 我的建议:

      MERGE (Name)-[:WORK_AT]->(Nation)
      

      我看到您正在对节点使用 MERGE,所以如果 Name 或 Nation 的任何值重复,您应该使用 MERGE 而不是 CREATE。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 2015-09-07
        相关资源
        最近更新 更多