neo4j - MERGE 子句中的逗号与 MATCH 子句中的逗号一样吗?
问题描述
以下在 neo4j 4 中运行良好:
MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a
但以下返回错误:
MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a
错误文本: Neo.ClientError.Statement.SyntaxError
Invalid input ',': expected whitespace, a relationship pattern, ON, FROM GRAPH, USE GRAPH, CONSTRUCT, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE UNIQUE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN, UNION, ';' or end of input (line 1, column 22 (offset: 21))
"MERGE (a)-->(b)<--(c), (b)-->(d)"
^
如果我理解正确,merge 提供了一定程度的 upsert 功能。但是,merge 在匹配能力上是否比 match 更受限制?如何合并需要逗号分隔的复杂非线性模式?
解决方案
如果模式中的任何项目尚不存在,则将创建整个模式。 因此,为了安全起见,您必须始终确保每个模式只有一个可能不存在的项目。MERGE
MERGE
这就是为什么只MERGE
用一个术语来支持模式才有意义。
例如,而不是这个(无论如何,这不是合法的 Cypher):
MERGE
(a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
(b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a
你实际上应该这样做:
MERGE (a:Foo {id: 'a'})
MERGE (b:Foo {id: 'b'})
MERGE (c:Foo {id: 'c'})
MERGE (d:Foo {id: 'd'})
MERGE (a)-[:BAR]->(b)
MERGE (b)<-[:BAR]-(c)
MERGE (b)-[:BAR]->(d)
RETURN a
推荐阅读
- windows - 通过 ssh 的远程命令失败,即使 ssh -T git@github.com 成功
- html - Bootstrap 导航栏汉堡图标未显示
- python - TextBlob NaiveBayesClassifier 总是返回 1
- python - 如何根据SQLAlchemy中的total_score列对表格进行排序并显示?
- iis - 在 Window 10 Pro IIS 上托管 .NET 5 ASP.NET 应用程序
- spring-boot - 与 Angular 11 集成时,JWT Springboot 应用程序无法正常工作
- python - 视觉工作室代码蟒蛇问题
- c++ - 在 (K)ubuntu 20.04 上使用 GCC11
- java - 我在考试中遇到了这个继承问题,对输出感到困惑..你能告诉我正确答案吗?为什么
- javascript - 使用 XML 页面时避免 [Uncaught DOMException: Failed to set the 'innerHTML' property on 'Element'] 的条件