2015-01-13 75 views
1

如果以前曾询问过此问题,我非常抱歉。它似乎比本来应该是更基本的。使用Cypher与现有节点创建多个关系

我正在努力为我的雇主评估Neo4j。我没有参与建立eval环境,它似乎很小。我只有基于网页的浏览器&密码才能完成任何事情。我甚至无法将文件加载到服务器以便通过CSV加载。

而且我在加载测试数据时遇到了很多麻烦。我选择使用数据仓库元数据作为主题,并添加:表节点,然后添加:模型节点(对表[APPEAR_ON])的图表编目。我应该指出...... APPEAR_ON关系源于RDMS中的多对多关系:一个模型包含许多表格;一个表格可以出现在多个模型上。所以我不认为我能够与节点同时加载关系。我不知道除了加载所有节点,然后加载所有关系以外还有什么其他的尝试。评论?

  • 我可以加载:表节点和:模型节点只是拉动 在一起的许多CREATE /合并在单独的行和 粘贴到他们在浏览器中暗号查询工具报表罚款。
  • 我也创建索引/唯一性约束这些标签创建节点后。 (我加载了每个ID属性。)
  • 但是我不能指出如何使用多语句方法创建关系。 MATCH (t:table),(m:model) WHERE t.tid = "T0525" AND m.mid = "M001" CREATE (t)-[R00864:APPEARS_IN]->(m) MATCH (t:table),(m:model) WHERE t.tid = "T0526" AND m.mid = "M001" CREATE (t)-[R00865:APPEARS_IN]->(m)

不幸的是,我只能通过包括在声明的最后返回做一次这项工作之一。当我发送多个语句时,出现一个错误,说我需要在第一个语句的CREATE和第二个语句的MATCH之间包含WITH语句。

非常感谢您的想法!

回答

6

要格式化查询,请选中cypher refcard的右上角框。您的查询大部分都是正确的,但您想要做的太多了,我想。如果没有with,则无法进行多个匹配/创建块。

所以重写一个方法是做它为两个查询:

MATCH (t:table),(m:model) WHERE t.tid = "T0525" AND m.mid = "M001" CREATE (t)-[R00864:APPEARS_IN]->(m); 

MATCH (t:table),(m:model) WHERE t.tid = "T0526" AND m.mid = "M001" CREATE (t)-[R00865:APPEARS_IN]->(m); 

但你是“重配”是同一型号的两倍。所以,你也可以这样做:

MATCH (t1:table { tid: "T0525" }), 
     (m:model {mid: "M001"}), 
     (t2:table { tid: "T0526 }) 
CREATE (t1)-[R00864:APPEARS_IN]->(m), 
     (t2)-[R00865:APPEARS_IN]->(m); 

注意,我在为比赛性质添加匹配标准淘汰WHERE,然后我用 一个逗号没有一个单独的查询,以创建两个单独的CREATE语句,就像你可以做同样的事情来做多个比赛。

+0

这很有帮助。我已经能够用一条语句为模型中的所有表创建关系。但是,我无法执行多个语句。我仍然需要一次运行一个。 –

+0

我不遵循 - 当然你需要一次执行一个语句。但是问题是什么? – FrobberOfBits

+0

哎呦,我刚收到你的留言。我想在浏览器中加载多个(数百...数千...)语句,然后单击执行一次。我不想手动执行每个语句。 –

相关问题