Искать все отношения / узлы в пути и фильтровать по списку свойств Neo4j - PullRequest
1 голос
/ 08 мая 2020

У меня 2 вопроса.

1) Как искать все отношения и фильтровать список свойств для PID (ProductID).

2) Как искать все узлы в Пути и отфильтруйте список свойств для PID (ProductID)

Вот как выглядит график

Ниже запрос фильтрует путь успешно, но я жестко закодировал индекс списка на 0

 match path= (n1) -[rel*..10] ->(n2) 
where all(rel in relationships(path)where rel.PID[0]=2)
return path

1) Как искать во всех отношениях и фильтровать в списке PID (ProductID)

Я попробовал запрос ниже, заменив жестко закодированное значение индекса PID [0] с l oop, но он мне ничего не возвращает. Пожалуйста, помогите мне понять, что не так с запросом.

match path= (n1) -[rel*..10] ->(n2) 
where all(rel in relationships(path)where [x in rel.PID  where x=2])
return rel

2) Как искать все узлы в Пути и фильтровать по списку PID (ProductID)

Аналогично, что будет запрос узлов.

Запрос ниже выполняется успешно, но я жестко закодировал индекс списка на 0

match path= (n1:Product) -[rel*..10] ->(n2) 
where all(r in nodes(path)where  r.PID[0]=1)
return path

Заменил жестко закодированное значение индекса PID [0], и он мне ничего не возвращает.

match path= (n1:Product) -[rel*..10] ->(n2) 
where all(r in nodes(path)where [x in  r.PID where x=1])
return nodes(path)

Любая помощь будет принята с благодарностью.

Спасибо

Шифровый код для графика

    CREATE 
  (`0` :Supplier {name:"Supplier1"}) ,
  (`3` :Airport {name:"Johannesburg",city:"Johannesburg",country:"South Africa",PID:'[1,2]'}) ,
  (`5` :Warehouse {name:"WareHouse1",PID:'[1,2]'}) ,
  (`8` :Airport {name:"Dusseldorf",city:"Dusseldorf",PID:'[1]'}) ,
  (`9` :Airport {name:"Brisbane",city:"Brisbane",country:"Australia",PID:'[1]'}) ,
  (`10` :Airport {name:"Perth",city:"Perth",country:"Australia",PID:'[1,2]'}) ,
  (`11` :Product {name:"Product1",PID:'[2]'}) ,
  (`12` :Product {name:"Product 2",PID:'[2]'}) ,
  (`20` :Airport {name:"Frankfurt",city:"Germany",country:"Germany",PID:'[2]'}) ,
  (`9`)-[:`TRANSPORT` {PID:'[1]'}]->(`10`),
  (`20`)-[:`TRANSPORT` {PID:'[2]'}]->(`3`),
  (`3`)-[:`TRANSPORT` {PID:'[2]'}]->(`10`),
  (`5`)-[:`RECEIVES` ]->(`10`),
  (`12`)-[:`TRANSPORT` {PID:'[2]'}]->(`20`),
  (`0`)-[:`TRANSPORT` ]->(`12`),
  (`0`)-[:`TRANSPORT` ]->(`11`),
  (`11`)-[:`TRANSPORT` {PID:'[2]'}]->(`8`),
  (`8`)-[:`TRANSPORT` {PID:'[1]'}]->(`3`),
  (`3`)-[:`TRANSPORT` {PID:'[1]'}]->(`9`)

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Я нашел более простой способ сделать это. Замените 1 в приведенном ниже запросе на PID, который вы ищете.

1) Как искать все взаимосвязи и фильтровать список свойств для PID (ProductID).

match path= (n1) -[rel*..8] -(n2)<-[:RECEIVES]-(n3)
where   all(rel in relationships(path) where 1 in rel.PID)
return path

2) Как искать все узлы в пути и фильтровать список свойств для PID (ProductID)

match path= (n1) -[rel*..8] -(n2)<-[:RECEIVES]-(n3)
where   all(rel in nodes(path) where 1 in rel.PID)
return path
0 голосов
/ 09 мая 2020

Используя образец базы данных Mov ie Graph, я написал приведенное ниже утверждение, которое, на мой взгляд, примерно эквивалентно тому, что вы собираетесь делать. Отношения Mov ie Graph: ACTED_IN имеют свойство roles, которое представляет собой список строк. Заявление соответствует всем актерам, сыгравшим роль под названием «Нео» в mov ie. В этом случае он находит все три фильма «Матрица» с Киану Ривзом в роли актера. Надеюсь, это поможет.

MATCH (a:Person)-[ai:ACTED_IN]->(m:Movie)
WITH a AS actor, m AS movie, ai.roles AS roles
UNWIND roles AS role
WITH actor, movie, role
WHERE role = "Neo"
RETURN actor.name, movie.title, role
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...