Neo4j 使用Cypher创建与现有节点的多个关系

Neo4j 使用Cypher创建与现有节点的多个关系,neo4j,Neo4j,如果以前有人问过这个问题,我很抱歉。这似乎比它本应该更基本 我正在为我的雇主评估Neo4j。我没有参与建立评估环境,而且它似乎是最小的。我只有基于网络的浏览器和密码来完成任何事情。我甚至无法将文件加载到服务器以通过CSV加载 我在加载测试数据时遇到了很多麻烦。我选择使用数据仓库元数据作为主题,并添加:表节点,然后添加:模型节点(对表[显示]的图表进行编目)。我应该指出。。。关系的出现来源于RDMS中的多对多关系:一个模型包含多个表;一个表可以出现在多个模型上。因此,我认为我无法在加载节点的同时加

如果以前有人问过这个问题,我很抱歉。这似乎比它本应该更基本

我正在为我的雇主评估Neo4j。我没有参与建立评估环境,而且它似乎是最小的。我只有基于网络的浏览器和密码来完成任何事情。我甚至无法将文件加载到服务器以通过CSV加载

我在加载测试数据时遇到了很多麻烦。我选择使用数据仓库元数据作为主题,并添加:表节点,然后添加:模型节点(对表[显示]的图表进行编目)。我应该指出。。。关系的出现来源于RDMS中的多对多关系:一个模型包含多个表;一个表可以出现在多个模型上。因此,我认为我无法在加载节点的同时加载关系。除了加载所有节点,然后加载所有关系,我不知道还能尝试什么。评论

  • 我可以通过拖动来加载:表节点和:模型节点 将多个CREATE/MERGE语句放在单独的行和 将它们粘贴到浏览器中的密码查询工具中
  • 在创建节点后,我还为这些标签创建了索引/唯一性约束。(我加载了每个的ID属性。)
  • 但我不知道如何使用多语句方法创建关系。
    
    匹配(t:table),(m:model),其中t.tid=“T0525”和m.mid=“M001”创建(t)-[R00864:出现在]->(m)
    匹配(t:table),(m:model),其中t.tid=“T0526”和m.mid=“M001”创建(t)-[R00865:出现在]->(m)
    
不幸的是,我只能通过在语句末尾包含RETURN来一次完成这项工作。当我发送多条语句时,我会收到一个错误,它说我需要在第一条语句的创建和第二条语句的匹配之间包含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);
注意,我通过在as match属性中添加匹配条件,消除了
WHERE
,然后使用
逗号可以创建两个独立的
create
语句,而不需要单独的查询,就像您可以进行多个匹配一样。

这很有帮助。我已经能够用一条语句为模型中的所有表创建关系。但是,我不能执行多个语句。我仍然需要一次一个地运行它们,我没有遵循——当然,您需要一次一个地执行语句。但有什么问题吗?哎呀,我刚收到你的留言。我想将多个(数百…数千…)语句加载到浏览器中,然后单击执行一次。我不想手动执行每一条语句。我认为浏览器在这方面不是很好。您可能希望使用批插入工具,或者通过neo4j shell运行这些语句。我不认为你会通过浏览器界面找到一个简单的方法,这不是它的设计目的。非常感谢。我现在在浏览器页面上看到一个备用/高级UI按钮。备用UI有一个带有控制台的选项卡。我将使用该接口来运行此操作。。。你能推荐其他语法吗?例如,使用ForEach的数组?不确定这是不是一个好问题。