Выражение для соответствия узлу Neo4j, который удовлетворяет двум или более отношениям (И) - PullRequest
0 голосов
/ 12 декабря 2018

enter image description here Мне нужно выражение, чтобы соответствовать узлу Neo4j, который удовлетворяет двум или более отношениям.Я пробовал следующее:

MATCH (p:pm{name: 'G1'})-[:HAS]->(e:en{name:'GREY1'})-[:WITH]-(a:RED2),
      (p:pm{name: 'G1'})-[:HAS]->(e:en{name:'GREY2'})-[:WITH]-(a:RED2) 
RETURN a

MATCH (p)--(a)--(e) 
WHERE (p:pm{name: 'G1'})-[:HAS]->(e:en{name:'GREY1'})-[:WITH]-(a:RED2) AND
      (p:pm{name: 'G1'})-[:HAS]->(e:en{name:'GREY2'})-[:WITH]-(a:RED2) 
RETURN a

, но я не получаю ни одного возвращенного узла, оба оператора сопоставления работают индивидуально

[КАК ВЫЗОВ КРАСНЫЙ2]

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Этот запрос даст вам следующий ответ:

MATCH (p:pm{name: 'G1'})-[:HAS]->(e1:en{name:'GREY1'})-[:WITH]-(a:RED2),
      (p:pm{name: 'G1'})-[:HAS]->(e2:en{name:'GREY2'})-[:WITH]-(a:RED2) 
      RETURN a

вот поток:

от узла G1 к GREY1 и GREY2 по связи HAS, теперь, когда вы достигли этих узловлюбой узел RED2, имеющий отношение WITH с GREY1 и GREY2, будет возвращен как.

, если вам нужно сохранить отношение G1 с RED2, вы также должны включить отношение TO в запрос.

поэтому ваш запрос должен быть:

  `MATCH (p:pm{name: 'G1'})-[:HAS]->(e1:en{name:'GREY1'})-[:WITH]-(a:RED2),
  (p:pm{name: 'G1'})-[:HAS]->(e2:en{name:'GREY2'})-[:WITH]-(a:RED2), 
  (P:pm{name:'G1'})-[:TO]->(a:RED2)
  RETURN a`
0 голосов
/ 12 декабря 2018

Проблема в том, что вы используете одно и то же имя переменной e для разных узлов.Попробуйте это:

MATCH (p:pm{name: 'G1'})-[:HAS]->(e1:en{name:'GREY1'})-[:WITH]-(a:RED2),
      (p:pm{name: 'G1'})-[:HAS]->(e2:en{name:'GREY2'})-[:WITH]-(a:RED2) 
RETURN a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...