performance - 如果不存在则创建关系和节点
问题描述
我有具有两种关系的组织和员工的图表:
(:Employee)-[:Worked]->(:Organization)
(:Employee)-[:Managed]->(:Organization)
组织具有Id
带有索引的独特属性。员工拥有Name
没有索引的财产。如果他不存在,我需要将新员工添加到组织中,或者如果他存在,则只添加新关系。但我不知道如何在没有索引的情况下实现这一点Name
。
1. 按 ID 查找组织。好的,这很快。
match (o:Organization {Id:1})
2. 查找已链接到组织的员工,如果不存在则添加新链接和员工。我不能使用简单
merge (e:Employee {Name: "name"})
merge (e)-[:Worked]->(o)
,因为我没有索引Name
(这会很慢),我只需要找到连接到所选组织的员工
merge (e:Employee { Name: "name" })-[:Worked]->(o)
不起作用 - 如果已经存在具有该名称但其他关系的员工,它将添加新员工,[:Managed]
因为例子。
解决方案
您似乎误解了MERGE
. 工作不需要索引MERGE
。
在您的特定情况下,:Employee(Name)
不需要索引MERGE (e:Employee {Name: "name"})
即可按预期工作。但是,拥有这样的索引会加快该MERGE
子句的处理速度,因此建议这样做。
推荐阅读
- angular - 如何将组件加载到另一个
- ruby-on-rails - 当我在rails中的form_for中使用实例变量时如何发送参数
- javascript - 仅当进程持续超过 500 毫秒时才运行代码
- javascript - 错误:类型 LoginComponent 是 2 个模块声明的一部分:LoginModule 和 AppModule
- php - Yii2 - WebService API 和队列
- java - 如何在android RecyclerView中使用onBindViewHolder与多个项目
- r - 如何遍历现有 R 函数中 2 个数据帧中的所有列和行
- powerbi - DAX:使用切片器的 FILTER 计算表
- c# - AutoFixture 自定义与构建
- android - 改造斜杠作为查询