显示从节点到节点Neo4j的关系

时间:2016-05-06 00:07:50

标签: neo4j

我对Neo4j很新,现在已经玩了几天了。

我试图通过展示一个表如何与另一个表相关(数据被拉到或从一个表推送到另一个表)以及用于执行哪些脚本来使用Neo4j来映射我们公司的数据库这种拉动和推动。为此,我使用了三个不同的属性:TableName,ScriptName和TableTouch。

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

以下是.CSV I导入的示例:

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)

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

现在我需要的一个例子是Node" Source"连接Node" Water"因为"来源" = Water.TableTouch和" Water" = Source.TableTouch。

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

我希望TableName节点连接到其他TableName节点,其中在另一个节点的TableName.TableTouch中找到一个节点的TableName。我该怎么做呢?我是否需要以不同的方式格式化我的.CSV格式?

谢谢, -Andrew

编辑:这可能会使事情变得更加清晰

我有什么:

enter image description here 我想要的是什么(红色箭头):enter image description here

1 个答案:

答案 0 :(得分: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节点来表示缺少源表。

结果

enter image description here