【问题标题】:Find all nodes with equal relationships查找所有具有相等关系的节点
【发布时间】:2017-09-15 15:36:56
【问题描述】:

我有一个数据库,其中包含游戏中使用的策略。

(strategy_1:Human) - [:BEATS] -> (strategy_1:Alien)
(strategy_2:Human) - [:BEATS] -> (strategy_1:Alien)
(strategy_3:Human) - [:LOSES] -> (strategy_1:Alien)
(strategy_4:Human) - [:DRAWS] -> (strategy_1:Alien)

(strategy_1:Human) - [:LOSES] -> (strategy_2:Alien)
(strategy_2:Human) - [:LOSES] -> (strategy_2:Alien)
(strategy_3:Human) - [:LOSES] -> (strategy_2:Alien)
(strategy_4:Human) - [:DRAWS] -> (strategy_2:Alien)

因此,人类的策略可以击败、平局或输掉外星人的策略。我正在尝试找到所有具有相同关系的策略,因此针对相同的 Alien 策略进行 BEAT、DRAW 或 LOSE。

在示例情况下,它将是 strategy_1 和 strategy_2。现在我正往这边走:

MATCH (strategyA:Human)-[r1]->(strategyB:Alien)<-[r2]-(strategyC:Human)
WHERE type(r1) = type(r2) AND NOT strategyA = strategyC 
RETURN strategyA

但这当然只会给我所有至少有一个匹配关系的策略。我现在如何迈出步骤来测试 strategyA 和 strategyC 的所有关系?或者有更简单的方法吗?

【问题讨论】:

    标签: neo4j cypher graph-databases nosql


    【解决方案1】:

    如果您想收集与具有给定关系类型的外星人策略相关的所有人类策略,您可以简单地执行以下操作:

    MATCH (alien_strategy:Alien)
    OPTIONAL MATCH (alien_strategy)<-[rel]-(human_strategy:Human)
    RETURN alien_strategy, type(rel), collect(DISTINCT human_strategy)
    

    这将列出所有外星人策略、关系类型以及针对外星人策略和关系类型的每种组合所收集的人类策略列表。

    按照您的示例,结果将如下所示:

    strategy_1:alien, BEATS, [strategy_1:Human, strategy_2:Human]
    strategy_2:alien, LOSES, [strategy_1:Human, strategy_2:Human, strategy_2:Human]
    

    【讨论】:

    • 嘿,这已经很酷了,但不是我想要的。我试图找到所有人类的策略,它们彼此相同,赢、输和平局都是相同的外星策略。
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多