使用Cypher创建与现有节点的多个关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Cypher创建与现有节点的多个关系相关的知识,希望对你有一定的参考价值。
如果以前曾问过这个问题我很抱歉。它似乎比应该更基本。
我正在为我的雇主评估Neo4j。我没有参与设置eval环境,它看起来很小。我只有基于网络的浏览器和密码才能完成任何工作。我甚至无法将文件加载到服务器以便通过CSV加载。
我在加载测试数据时遇到了很多麻烦。我选择使用数据仓库元数据作为我的主题并添加:表节点然后:模型节点(对表[APPEAR_ON]的图表进行编目)。我应该指出...... APPEAR_ON关系源自RDMS中的多对多关系:模型包含许多表;表格可以出现在多个模型上。所以我认为我不能在节点的同时加载关系。除了加载所有节点然后加载所有关系,我不知道还有什么可以尝试。评论?
- 我可以通过将多个CREATE / MERGE语句放在不同的行上并将它们粘贴到浏览器中的cypher查询工具中来加载:表节点和:模型节点。
- 在创建节点后,我还为这些标签创建了索引/唯一性约束。 (我为每个加载了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)
不幸的是,我只能通过在语句末尾包含RETURN来一次完成这项工作。当我发送多个语句时,我收到一个错误,说我需要在第一个语句的CREATE和第二个语句的MATCH之间包含一个WITH语句。
非常感谢您的想法!
要格式化查询,请选中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
语句而没有单独的查询,就像您可以执行相同的操作来执行多个匹配一样。
以上是关于使用Cypher创建与现有节点的多个关系的主要内容,如果未能解决你的问题,请参考以下文章