【问题标题】:Show Relations from Node to Node Neo4j显示从节点到节点 Neo4j 的关系
【发布时间】:2016-05-06 10:58:25
【问题描述】:

我是 Neo4j 的新手,已经玩了几天了。

我正在尝试使用 Neo4j 来映射我们公司的数据库,通过显示一张表与另一张表的关系(数据被拉到或从一张表推送到另一张表)以及用于执行拉取和推送的脚本。为此,我使用了三个不同的属性:TableName、ScriptName 和 TableTouch。

  • TableName:对应表名的表节点
  • ScriptName:脚本节点对应的脚本 更新表格
  • TableTouch:用于显示哪个表影响另一个表 表

这是我正在导入的 .CSV 示例:

TableName    ScriptName    TableTouch
Source       ScriptA       Water/Oil
Water        ScriptB       Source
Oil          ScriptC       Source

这是我到目前为止的代码:

CREATE CONSTRAINT ON (c:Table) ASSERT c.TableName IS UNIQUE;
CREATE CONSTRAINT ON (c:Scripts) ASSERT c.ScriptName IS UNIQUE;

LOAD CSV WITH HEADERS FROM 
"file:///C:\\NeoTest.CSV" AS line

MERGE (table:Table {TableName: UPPER(line.TableName)})
SET table.TableTouch = UPPER(line.TableTouch)
MERGE (script:Scripts {ScriptName: UPPER(line.ScriptName)})

MERGE (table) - [:UPDATED_BY] -> (script)

这会将脚本与其相应的表相关联,并加载到所有表和脚本节点中。

现在我需要的一个示例是节点“Source”连接到节点“Water”,因为“Source”= Water.TableTouch 和“Water”= Source.TableTouch。

假设任何给定的表格都可以在 TableTouch 属性中列出多个表格。

我希望 TableName 节点连接到其他 TableName 节点,其中一个节点的 TableName 在另一个节点的 TableName.TableTouch 中找到。我该怎么做呢?我需要为此设置不同的 .CSV 格式吗?

谢谢, -安德鲁

编辑:这可能会让事情更清楚

我有什么:

我想要什么(红色箭头):

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    [更新]

    如果我了解您的情况,您希望表示用于生成每个表的脚本,以及该脚本使用的其他表。

    而且,如果我理解您的 CSV 文件和图片的含义,看起来Source 表是由ScriptA 生成的,没有使用任何其他表中的数据。如果是这样,您可以创建您的 CSV 文件,使其看起来像这样(Source 表行的 TableTouch 列具有特殊值 NOTHING - 您可以使用其他名称 - 表示该列实际上没有值):

    TableName,ScriptName,TableTouch
    Source,ScriptA,NOTHING
    Water,ScriptB,Source
    Oil,ScriptC,Source
    

    数据模型:

    (src:Table {name: 'Source'})<-[:USES]-(s:Script {name: 'ScriptC'})-[:MAKES]->(dest:Table {name: 'Oil'})
    

    注意:此数据模型允许单个脚本“使用”任意数量的源表并“制作”任意数量的目标表。

    创建约束

    CREATE CONSTRAINT ON (t:Table) ASSERT t.name IS UNIQUE;
    CREATE CONSTRAINT ON (s:Script) ASSERT s.name IS UNIQUE;
    

    导入数据

    LOAD CSV WITH HEADERS FROM "file:///C:\\NeoTest.CSV" AS line
    MERGE (src:Table     {name: line.TableTouch})
    MERGE (dest:Table    {name: line.TableName})
    MERGE (script:Script {name: line.ScriptName})
    MERGE (script)-[:USES]->(src)
    MERGE (script)-[:MAKES]->(dest)
    

    注意:为了保持查询简单,我们只创建(最多)一个NOTHING 节点来表示缺少源表。

    结果

    【讨论】:

    • 我添加了一些图片,当我试图描述得更清楚一些时,它们可能会变得更清晰。如果有更好的方法来设置 CSV,那很好,我不确定从什么开始最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多