如果以前曾问过这个问题我很抱歉。它似乎比应该更基本。
我试图为我的雇主评估Neo4j。我没有参与设置eval环境,它看起来很小。我只有基于网络的浏览器& cypher完成任何事情。我甚至无法将文件加载到服务器以便通过CSV加载。
我在加载测试数据时遇到了很多麻烦。我选择使用数据仓库元数据作为我的主题并添加:表节点然后:模型节点(对表[APPEAR_ON]的图表进行编目)。我应该指出...... APPEAR_ON关系源自RDMS中的多对多关系:模型包含许多表;表格可以出现在多个模型上。所以我不认为我能够在节点的同时加载关系。除了加载所有节点然后加载所有关系之外,我不知道还有什么可以尝试。评论?
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语句。
非常感谢你的想法!
答案 0 :(得分: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
语句而不需要单独的查询,就像您可以执行相同的操作来执行多个匹配一样。