如何解决像MATGE子句中的MERGE子句中的逗号?
以下在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)"
^
如果我正确理解,则合并将提供一定程度的upsert功能。但是合并在匹配能力方面比匹配更受限制吗?如何合并complex non-linear patterns that require comma separations?
解决方法
如果整个模式中的任何项目都不存在,则将创建整个 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。