如何解决MATCH不匹配后如何继续执行Neo4J Cypher请求?
我的 Neo4J 中有以下参数:
{
"lists": [
{
"from": "someone","to": "somebody"
}
]
}
以及以下查询:
MATCH (c:Concept{name:'infranodus'}) WITH c,$lists AS list
UNWIND CASE WHEN list = [{}] THEN [null] ELSE list END AS l
WITH l
MATCH (cp1:Concept{name:l.from})
WITH cp1
MATCH (cp2:Concept{name:'somebody'})
RETURN cp1,cp2;
上面的查询将起作用。
但是,如果我用不存在的参数替换 l.from
,例如l.about
,然后 - 由于匹配没有发生 - 第二个 cp2
匹配不会触发。
即使未找到 cp1
,我如何更改此行为并继续执行此查询?也许有办法传递一个虚拟变量作为结果?
MATCH (c:Concept{name:'infranodus'}) WITH c,$lists AS list
UNWIND CASE WHEN list = [{}] THEN [null] ELSE list END AS l
WITH l
MATCH (cp1:Concept{name:l.about})
WITH cp1
MATCH (cp2:Concept{name:'somebody'})
RETURN cp1,cp2;
解决方法
使用可选匹配。如果没有找到匹配项,那么它将使用 NULL 作为模式的缺失部分。类似于 SQL 中的外连接。
NEW:
OPTIONAL MATCH (cp1:Concept{name:l.about})
OLD:
MATCH (cp1:Concept{name:l.about})
,
您可以用 IN
谓词替换它吗?
例如:
WITH {from: 'Matt Olg',about: 'Matthew Olg'}
AS l
MATCH (n:Person)
WHERE n.name IN [l.from,l.to]
RETURN n.name
╒══════════╕
│"n.name" │
╞══════════╡
│"Matt Olg"│
└──────────┘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。