【问题标题】:How to check if a UNWIND parameter exists in Neo4J Cypher?如何检查 Neo4J Cypher 中是否存在 UNWIND 参数?
【发布时间】:2021-01-07 03:15:01
【问题描述】:

我有一个 Neo4J Cypher 查询,在某些情况下某些参数可能不存在。

因此,例如,在这部分语句中:

UNWIND statement.mentionsRelations as mentionsRelation 
MATCH (c:Concept{name:mentionsRelation.name})

只有当mentionsRelation.name 存在时,我才想继续MATCH

如何添加此检查?

我尝试使用CASE,但我认为我将其放在了错误的位置...

谢谢!

【问题讨论】:

  • 如果MATCH 不...匹配,其余查询将不会执行。这是您要避免的行为吗?查询的其余部分是什么?
  • 是的,即使MATCH 不匹配,我也想继续查询。剩下的是一个很长的查询,后面还有更多 MATCH 子句和其他内容。
  • 我实际上然后调用CREATE 子句来保存某个连接,然后另一个MATCHCREATE 查询不同的连接。

标签: neo4j cypher


【解决方案1】:

使用可选匹配。如果没有找到匹配项,那么它将使用 NULL 作为模式的缺失部分。类似于 SQL 中的外连接。

NEW:
OPTIONAL MATCH (c:Concept{name:mentionsRelation.name}) 

OLD:
MATCH (c:Concept{name:mentionsRelation.name})

【讨论】:

    【解决方案2】:

    您可以使用apoc.do.when,如果谓词匹配,您可以指定一个查询,如果不匹配,则指定一个查询,例如:

    WITH [{mentions: [], count:10}, {mentions: []}] AS params
    UNWIND params AS parameter
    CALL apoc.do.when(parameter.count IS NOT NULL, 'RETURN null AS c', 'MATCH (n:Person) RETURN count(n) AS c')
    YIELD value
    RETURN value
    
    ╒══════════╕
    │"value"   │
    ╞══════════╡
    │{"c":null}│
    ├──────────┤
    │{"c":10}  │
    └──────────┘
    

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2014-04-03
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多