【问题标题】:Can pattern be used with case in neo4j cypher模式可以与neo4j cypher中的case一起使用吗
【发布时间】:2018-05-22 17:25:58
【问题描述】:

是否可以在 cypher 中使用带有 case 语句的模式?如果模式存在,则专门返回 true 或 false。我正在尝试建立友谊不被回报的人际关系模型。

所以 (user)-[:friend]->(user2) 是一个单独的数据点 (user2)-[:friend]->(user1)

然后我想运行一个查询,显示 user1 作为回报将他们视为他们的朋友

看起来像这样的东西(显然不起作用)

MATCH (asker)-[:friend]->(target) RETURN CASE (target)-[:friend]->(asker)
WHEN present THEN true
ELSE THEN false As returnsFriendship

无论如何要让它工作?

我知道一种解决方法是运行一个查询,寻找那些认为 user1 朋友的人,然后在我的应用程序中的 cypher 之外循环遍历他们,但我想知道是否有一种纯 cypher 方式来做到这一点。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    CASE 子句不是获得布尔结果的唯一方法,对于您的用例也不是必需的。

    (target)-[:teaches]->(asker) 这样的模式会产生一个(可能是空的)路径集合,所以这会起作用:

    MATCH (asker), (target)
    RETURN asker, target,
      SIZE((target)-[:teaches]->(asker)) > 0 AS returnsFriendship
    

    但如果只需要测试模式是否存在,使用EXISTS函数会更好:

    MATCH (asker), (target)
    RETURN asker, target,
      EXISTS((target)-[:teaches]->(asker)) AS returnsFriendship
    

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2013-05-15
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多