在Neo4j匹配命令

时间:2014-07-15 06:48:54

标签: neo4j

我有两个图表,其中一些节点具有相似的标签。如果我想使用match命令获取图形的一部分,那么我是否需要指定图形名称。 例如, MATCH(dom)< - [:headsby] - (Hd) 返回计数(Hd.name);

我在两个图中都有(dom)< - [:headsby] - (Hd)关系,那么它获取哪些数据? 我发现它给了我两个图的总计数。 如果我必须使用match命令传递图表别名以及如何操作,请告诉我。

提前致谢。

这是完整模型的导入查询:

LOAD CSV FROM "file:D:\\Neo4j\\demo2dbcopy.csv" AS emp 
MERGE (cname:Cmpname {name: emp[0]}) 
MERGE (clusters:ClustName { name: emp [1]}) 
MERGE (dom:domains { name: emp [2]}) 
MERGE (Hd:Head { name: emp [3]}) 
MERGE (DelHd:DeliveryHead { name: emp [4]}) 
MERGE (Mgr:Managers { name: emp [5]}) 
MERGE (Emp:Employees { name: emp [6]}) 
CREATE (cname)-[:has]->(clusters),
       (clusters)-[:contains]->(dom)<-[:headedby]-(Hd),
      (Hd)-‌​[:equals]->(DelHd),
      (DelHd)-[:assistedby]->(Mgr),
      (Mgr)-[:Dividesinto]->(Emp) 
return cname,clusters,dom,Hd,DelHd,Mgr,Emp;    

2 个答案:

答案 0 :(得分:3)

如果我理解这个,那么正确的想要在一个Neo4j数据库中有多个子图。

我认为您的模型缺少子图的根节点。

将CSV文件合并为一个并添加1列以分隔不同的子图。 然后import语句看起来像这样:

LOAD CSV FROM "file:D:\\Neo4j\\demo2dbcopy.csv" AS emp
MERGE (root:SubGraph {source: emp[7]})
MERGE (cname:Cmpname {name: emp[0]}) 
MERGE (clusters:ClustName { name: emp [1]}) 
MERGE (dom:domains { name: emp [2]}) 
MERGE (Hd:Head { name: emp [3]}) 
MERGE (DelHd:DeliveryHead { name: emp [4]}) 
MERGE (Mgr:Managers { name: emp [5]}) 
MERGE (Emp:Employees { name: emp [6]}) 
CREATE (root)<-[:PART_OF_SUB_GRAPH]-(cname)-[:has]->(clusters),
       (clusters)-[:contains]->(dom)<-[:headedby]-(Hd),
      (Hd)-‌​[:equals]->(DelHd),
      (DelHd)-[:assistedby]->(Mgr),
      (Mgr)-[:Dividesinto]->(Emp) 
return root,cname,clusters,dom,Hd,DelHd,Mgr,Emp;    

你可能想做这样的事情:

从子图“csv1”中查找所有域并返回Heads计数

MATCH (root:SubGraph {source: "csv1"})<--(:Cmpname)-->(:ClustName)-->(dom:domains {name:"foo"})<-[:headedby]-(hd) RETURN dom.name, count (hd.name);

更新:在此处结合此问题的答案:Differentiating Neo4j queries for different data files

答案 1 :(得分:0)

我已经使用以下查询来响应上面的语法,但它返回0行,其中正确的答案必须是7行。

MATCH(root:SubGraph {source:“demo2db”})&lt; - (clusters:ClustName {name:“ABC”}) - [:contains] - &gt;(dom:domains {name:“XYZ” })RETURN count(dom.name);