как отфильтровать список узлов в neo4j по свойствам - PullRequest
0 голосов
/ 30 января 2020

Я хочу исключить те пути, которые не начинаются с "Media Topics", Name = "Media Topics" является свойством узла внутри языков.

Вот мой запрос

MATCH path = (top:Taxonomy)-[:IS_CHILD_OF*0..]->(taxo)
WHERE NOT ()-[:IS_CHILD_OF]->(top)
WITH DISTINCT [node in nodes(path) | [(language)-[:IN_LANGUAGE{lang:'en'}]->(node) | language][0]] as languages//chn
ORDER BY size(languages) DESC
return [n in reverse(languages) | n.name ] as nodesInPath

вот мой вывод

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "capital punishment"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "fine (penalty)"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "prison"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "court-ordered psychiatric treatment"]

["crime, law and justice", "judiciary", "court", "trial (court)", "pre-trial"]

Теперь последняя строка не должна печататься, так как она не начинается с "Media Topi c"

1 Ответ

0 голосов
/ 30 января 2020
MATCH path = (top:Taxonomy)-[:IS_CHILD_OF*0..]->(taxo) 
WHERE NOT ()-[:IS_CHILD_OF]->(top) 
WITH DISTINCT [node in nodes(path) | [(language)-[:IN_LANGUAGE{lang:'en'}]->(node) | language][0]] as languages 
ORDER BY size(languages) DESC
WITH [n in reverse(languages) | n.name ] as nodesInPath 
WHERE nodesInPath[0]= "Media Topic"
RETURN nodesInPath

Я не сильно изменил ваш запрос, так как я не очень то, что вы пытаетесь достичь здесь. Но я чувствую, что этот запрос может быть улучшен с точки зрения производительности. я отфильтровал окончательный список, который вы получили, с условием, что нулевой элемент должен быть «Media Topi c». если бы вы могли дать более подробную информацию о вашем графике. Я могу быть более полезным.

...