首页 > 解决方案 > 使用neo4j获取根父节点

问题描述

我已经将一个 csv 文件导入 neo4j 并为它们创建了节点和关系。

在上面,前两个节点位于 db1 下,后四个节点位于 db2 下。如何找到最后四个节点属于 db2?

下面是代码和csv文件columnname,tablename,databasename,systemname abc,1a,db1,Finance def,1a,db1,Finance ghi,1a,db1,Finance klm,1a,db1,Finance abc,1a,db2,Medical def ,1a,db2,Medical ghi,1a,db2,Medical klm,1a,db2,Medical nop,1a,db2,Medical qrs,1a,db2,Medical

I've created nodes and relationships for the above csv file in neo4j
This is for getting unique values   
    CREATE CONSTRAINT ON (c:ColumnName) ASSERT c.ColumnName IS UNIQUE;
    CREATE CONSTRAINT ON (c:TableName) ASSERT c.TableName IS UNIQUE;
    CREATE CONSTRAINT ON (c:DatabaseName) ASSERT c.DatabaseName IS UNIQUE;
    CREATE CONSTRAINT ON (c:SystemName) ASSERT c.SystemName IS UNIQUE;

This is for loading csv file and creating nodes and relationships

    LOAD CSV WITH HEADERS FROM "file:///test.csv" AS line
    MERGE (ColumnName:ColumnName {ColumnName: line.ColumnName})
    MERGE (TableName:TableName {TableName:line.TableName})
    MERGE (DatabaseName: DatabaseName {DatabaseName:line.DatabaseName})
    MERGE (SystemName: SystemName {SystemName:line.SystemName})

This is creating relationships among the nodes
     MERGE (ColumnName)-[:iscolumnof]->(TableName)
     MERGE (TableName)-[:istableof]->(DatabaseName)
     MERGE (DatabaseName)-[:isdatabaseof ]->(SystemName)
     
 If, i select one node 'nop'and expand i'll get the node(1a) 1a and if i expand 1a i'll get all the 
nodes(columns). How to find that 'nop' belongs to 'db2'?

.csv 文件

标签: neo4jcypher

解决方案


据我了解,你有一个模式

(:ColumnName)-[:iscolumnof]->(:TableName)-[:istableof]->(:DatabaseName)-[:isdatabaseof ]->(:SystemName)

如果要测试某个 :ColumnName 是否属于 :DatabaseName

WITH 'nop' AS columnName, 'db2' AS databaseName
MATCH (col:ColumnName {ColumnName:columnName}),(db:DatabaseName 
{DatabaseName:databaseName})
RETURN EXISTS((col)-[:iscolumnof]->(:TableName)-[:istableof]->(db)) AS result

如果你想要 db2 的所有列

WITH 'db2' AS databaseName
MATCH (c:ColumnName)-[:iscolumnof]->(:TableName)-[:istableof]->(:DatabaseName {DatabaseName:databaseName}) 
RETURN c.ColumnName AS column

推荐阅读