【问题标题】:Create unique nodes and make labels with multiple values创建唯一节点并制作具有多个值的标签
【发布时间】:2016-12-04 18:13:51
【问题描述】:

我是 neo4j 的菜鸟,我的问题看起来很简单。 我有 CSV 文件,具有下一个结构:

Id 是 Persons ID,Fam 是此人参与的项目 ID。 如果他们从事同一个项目,我想联系他们。

在这种情况下,最好的数据模型是什么?我首先想到的是制作 id - 节点和 Fam 标签。但我不知道如何将多个标签加载到一个节点。 二是将id和Fam都作为节点,然后查询显示相关员工。

第二种情况的代码是这样的:

LOAD CSV WITH HEADERS FROM 'file:///PNG20161202.csv' AS line
MERGE (n:id {Person_id: toInt(line.id)})
WITH line, n
MERGE (m:Fam {Fam_id: toInt(line.Fam)})
WITH m,n
MERGE (n)-[:WORK_IN]->(m);

但我不知道如何只显示相关的 id。 (我需要在 Gephi 中导出和可视化这个网络,只有 id)

对于第一种情况,我知道如何在 id 之间建立关系,但不知道如何编写 LOAD CSV 查询,这将使 id 具有多标签。

非常感谢您的建议。

【问题讨论】:

    标签: neo4j load-csv


    【解决方案1】:

    我相信您从表格和当前数据的角度考虑了太多,因此您错过了要建模的更大图景。使用图形数据库,更容易根据实体(您正在建模的重要“事物”)以及它们之间的关系进行思考。

    我认为这是你描述中最重要的部分:

    "Id是Persons ID,Fam是项目ID,这个人拿的 部分。如果他们从事同一个项目,我想联系他们。”

    您提到的重要“事物”是人员和项目。所以在我看来,这些是你应该使用的标签,:Person 和:Project。 ID 往往是唯一的,因此它们应该是 :Person 和 :Project 节点上的属性,对标签和 ID 属性具有唯一约束。

    您可以像这样设置您的独特约束:

    CREATE CONSTRAINT ON (p:Person)
    ASSERT p.ID IS UNIQUE
    
    CREATE CONSTRAINT ON (pr:Project)
    ASSERT pr.ID IS UNIQUE
    

    您的导入只会将 :Persons 连接到 :他们从事的项目。

    LOAD CSV WITH HEADERS FROM 'file:///PNG20161202.csv' AS line
    MERGE (n:Person {ID: toInt(line.id)})
    MERGE (m:Project {ID: toInt(line.Fam)})
    MERGE (n)-[:WORKED_ON]->(m);
    

    一旦你有了这个,就应该很容易查询:在同一项目上工作的人,而且你不需要 LOAD CSV。

    编辑

    要在从事相同项目的人员之间创建 :KNOWS 关系,您可以使用以下查询:

    MATCH (p1:Person)-[:WORKED_ON]->(:Project)<-[:WORKED_ON]-(p2:Person)
    WITH DISTINCT p1, p2
    MERGE (p1)-[:KNOWS]-(p2)
    

    【讨论】:

    • 嗨 InverseFalcon,我想做的只是显示人之间的关系。如果他们在同一个项目上工作,他们 [:KNOW] 彼此。将不胜感激有关此查询的任何帮助。提前致谢!
    • 我编辑了答案以包含创建这些关系的查询。
    • 谢谢,你已经回答了我的问题,如果你能帮我导出这些东西会很好,如果没有,我会自己研究))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多