neo4j - 在一个查询中创建多个连接
问题描述
如何将一个节点连接到不同类型的多个节点?要连接的节点作为参数在一个列表中,部分节点在数据库中不存在。如何只连接现有的,而没有重复现有的连接?
OPTIONAL MATCH (ja : Course{name: 'Math'}), (jm : Student {name: 'James'}) , (bl : Student {name: 'Bill'})
MERGE (ja)-[r1:learn {nickname: 'ALL'}]->(jm)
MERGE (ja)-[r2:learn {nickname: 'ALL'}]->(bl)
RETURN ja, jm
在上面的代码中,学生 James 存在而 Bill 不存在,整个操作都失败了,并且没有创建 Course (Math) 与 Student (James) 之间的关系!
解决方案
您可以跨列表中的值进行 MATCH ,如果列表中有一些项目没有节点,那很好,只要至少一个有效:
MATCH (ja : Course{name: 'Math'}), (student:Student)
WHERE student.name IN ['James', 'Bill']
MERGE (ja)-[:learn {nickname:'ALL'}]->(student)
RETURN ja, student
推荐阅读
- javascript - Bootstrap 需要验证才能选择下拉列表之一
- node.js - 如何在 Node.js 中使用调试器语句?
- asp.net-core - 如何通过值转换修改属性上的 EntityState?
- sql - 如何将日期从 YYYY-MM-DD 转换/更新为 DDMMMYYYY 格式?
- python - 无法使用 Dask 从 HDFS 读取 (read_csv) (FileNotFoundError: [Errno 2])
- bit-manipulation - 为什么 INT_MAX & x = x?
- java - Lombok - java.lang.StackOverflowError:toString 方法上的 null
- windows - Web 应用程序 Kerberos 身份验证:与 cookie 结合的正确方法是什么?
- c# - 如何在 ArgumentException 中根据条件添加更多变量
- openid-connect - 如何允许未经授权的用户使用具有 OpenID Connect 身份验证类型的 AppSync 访问某些查询/突变?