node.js - Neo4j:如何创建一个唯一节点而不是一组节点
问题描述
我想根据(每个报表节点都有几个与其相关的指标节点event nodes
)在一组节点( )中创建一个新节点( )。我想用规则设置新的:report nodes
indicator nodes
event nodes
- a
report nodes
只连接一个event node
- 如果多个
indicator nodes
具有相同的属性“模式”,那么它们属于同一个事件节点
这是我的查询代码:
OPTIONAL MATCH
(indicator_1_1:indicator)<-[:REFERS_TO]-(report_1:report)-[:REFERS_TO]->(indicator_1_2:indicator),
(indicator_2_1:indicator)<-[:REFERS_TO]-(report_2:report)-[:REFERS_TO]->(indicator_2_2:indicator)
WHERE
indicator_1_1.pattern=indicator_2_1.pattern
and
indicator_1_2.pattern=indicator_2_2.pattern
MERGE
(report_1)-[:related_to]->(event:EVENT)<-[:related_to]-(report_2)
但我希望三个报告节点属于一个事件节点。我想知道我应该对我的查询进行哪些更改,或者在获得两个事件节点后我应该采取什么下一步措施。
更重要的是,我想知道是否有比我更有效的查询代码。
谢谢!
解决方案
我没有任何数据可以确认,但我认为对您的 Cypher 查询稍作改动就会产生您想要的结果。
来自 Neo4j Cypher 手册章节MERGE
(我的重点补充)。
在完整模式上使用
MERGE
时,行为是整个模式匹配,或者创建整个模式。MERGE
不会部分使用现有模式 - <strong>要么全部要么全无。如果需要部分匹配,可以通过将模式拆分为多个MERGE
子句来完成。
所以,按照这个,我想如果你改变
MERGE (report_1)-[:related_to]->(event:EVENT)<-[:related_to]-(report_2)
到
MERGE (report_1)-[:related_to]->(event:EVENT)
MERGE (event)<-[:related_to]-(report_2)
...您将阻止:EVENT
创建额外的节点并获取您正在寻找的图形。
推荐阅读
- python - 如何使用 Kotlin 从服务器接收数据?
- python - RPI 3.8.2 上的 Python 版本,但默认为 3.5.3 问题
- java - java中的线程安全随机访问循环数组?
- date - 我想在日期中添加一天并将其另存为新变量
- c++ - 在现有变量上创建类的实例
- .net-core - 将 .NetCore 2.1 应用程序部署到 Web 服务器的步骤。缺少步骤
- python - 如何使 argparse 从 nargs=REMAINDER 拆分 nargs='+'
- google-apps-script - 使用纯获取范围时找不到我的数字表名称范围
- javascript - 有没有办法根据 IFRAME 中的文本字符串制作 IF 语句?
- javascript - 属性和子属性未定义检查