我有两个图表,其中一些节点具有相似的标签。如果我想使用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;
答案 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);