2015-05-26 4 views
0

У меня есть база данных, содержащая используемые стратегии в игре.Найти все узлы с равными отношениями

(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) 

Таким образом, стратегия человека может БЫТЬ, РИСОВАТЬ ИЛИ ПОТЕРЯТЬСЯ против стратегии инопланетянина. Я пытаюсь найти все стратегии, которые имеют равные отношения, поэтому BEAT, DRAW или LOSE против тех же стратегий Alien.

В примерном случае это будет стратегия_1 и strategy_2. Сейчас я иду так:

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

Но это, конечно же, даст мне все стратегии, по крайней мере, с одним соглашением. Как я могу сделать шаг, чтобы проверить все отношения стратегииA и strategyC друг против друга? Или есть гораздо более простой способ сделать это?

ответ

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] 
+0

Эй, вот уже круто, но не совсем то, что я искал. Я пытаюсь найти все человеческие стратегии, которые равны друг другу, так что они выигрывают, проигрывают и рисуют против одних и тех же стратегий чужих. – Philiiiiiipp

Смежные вопросы