#java #graph #neo4j #cypher
Вопрос:
Я застрял в написании запроса на шифр, который позволил бы мне найти все узлы, код которых НЕ включен в данный список. Я пытался найти отрицание шаблона, отрицание узла, исключение в пути, но безуспешно.
Предположим, у меня есть список кодов (хотя в этом списке есть 1 элемент): [«1V2ZG»]
Я хотел бы создать запрос Cypher, который возвращал бы каждый дочерний узел ARNOG, которого НЕТ в приведенном выше списке.
Это начальный график:
Ответ на график, который я хочу:
Запрос, который я использую, возвращает все узлы, а это не то, что я хочу:
MATCH
(excl:Client)<-[:PARENT_OF*]-(n:Client:Group),
path=(b:BaseHierarchy)-[:INCLUDES]->(n)-[:PARENT_OF*]->(inc:Client)
WHERE excl.code IN ['1V2ZG'] AND n.code = 'ARNOG'
WITH b,
nodes(path) as nodes, relationships(path) as relationships
RETURN b,
apoc.coll.toSet(apoc.coll.flatten(collect(relationships))) as relationships,
apoc.coll.toSet(apoc.coll.flatten(collect(nodes))) as nodes;
Ответ №1:
Что о:
MATCH path=(b:BaseHierarchy)-[:INCLUDES]->(n)-[:PARENT_OF*]->(inc:Client)
WHERE n.code = 'ARNOG' AND
NONE(node IN nodes(path) WHERE node.code IN ['1V2ZG'])
WITH b, nodes(path) AS nodes, relationships(path) AS relationships
RETURN b,
apoc.coll.toSet(apoc.coll.flatten(collect(relationships))) as relationships,
apoc.coll.toSet(apoc.coll.flatten(collect(nodes))) as nodes;
?