GraphDB - получить пути между разными типами узлов - PullRequest
0 голосов
/ 25 мая 2020

У меня есть графическая БД (с использованием Neo4J), состоящая из 5 типов узлов, например, имя файла, тип1, тип2, тип3 и тип4.

CREATE (:type1{name:type1_A})
CREATE (:type1{name:type1_B})

CREATE (:type2{name:type2_A})
CREATE (:type2{name:type2_B})

CREATE (:type3{name:type3_A})
CREATE (:type3{name:type3_B})

CREATE (:type4{name:type4_A})
CREATE (:type4{name:type4_B})

CREATE (:filename{name:1A_2A_3A_4A})
CREATE (:filename{name:1A_2A_3A_4A_another})
CREATE (:filename{name:1A_2B_3A_4A})
CREATE (:filename{name:1A_2A_3B_4A})
CREATE (:filename{name:1A_2A_3A_4B})

Для каждого имени файла я создал 4 ссылки (с одинаковыми имя отношения) следующим образом:

MATCH(n:type1 {name:'type1_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)" 
MATCH(n:type2 {name:'type2_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)" 
MATCH(n:type3 {name:'type3_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)" 
MATCH(n:type4 {name:'type4_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)" 

и так далее для других имен файлов.

Теперь, например, я хотел бы получить все пути, включающие filename узлы, связанные с type1_A AND type2_A AND type3_A AND type4_A . В этом случае я за исключением узлов « 1A_2A_3A_4A » и « 1A_2A_3A_4A_another » и соответствующих путей к type1_A , type2_A и type3_A узлов.

Может ли кто-нибудь предложить мне соответствующий запрос Cypher?

Спасибо

1 Ответ

1 голос
/ 26 мая 2020

Попробуйте следующее и посмотрите, получите ли вы то, что ищете.

MATCH 
  (f:filename), 
  (t1:type1 {name: "type1_A")-[t1lt:linked_to]->(f), 
  (:type2 {name: "type2_A")-[:linked_to]->(f),
  (:type3 {name: "type3_A")-[:linked_to]->(f),
  (:type4 {name: "type4_A")-[:linked_to]->(f)
RETURN f, t1, t1lt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...