neo4j, как запросить переменные узлы между ограничением числа отношений между последующими узлами? - PullRequest
0 голосов
/ 07 июня 2019

Рассмотрим запрос, подобный следующему:

MATCH p=(b:label{ID:"M04"})-[r:Edge*2..2]-(d:label{ID:"S02"})
RETURN p LIMIT 10

Позвольте мне назвать промежуточный узел c.Отношения от b до промежуточных узлов и до конечного узла d относятся к одному типу Edge и имеют свойство EdgeID.От одного узла к другому существуют различные отношения типа Edge, каждое из которых имеет свое значение EdgeID.К следующему узлу есть другие отношения того же типа, и большинство из них имеют то же значение свойства EdgeID.

Например, график похож на:

(b)-[:Edge{EdgeID:1}]->(c)-[:Edge{EdgeID:1}]->(d)
(b)-[:Edge{EdgeID:2}]->(c)-[:Edge{EdgeID:2}]->(d)
(b)-[:Edge{EdgeID:3}]->(c)-[:Edge{EdgeID:3}]->(d)
....

Запрос возвращает множество отношений от b до c, но одно отношение от c до d

(b)-[:Edge{EdgeID:1}]->(c)-[:Edge{EdgeID:1}]->(d)
(b)-[:Edge{EdgeID:2}]->(c)-[:Edge{EdgeID:1}]->(d)
(b)-[:Edge{EdgeID:3}]->(c)-[:Edge{EdgeID:1}]->(d)
....

Я хочу вернуть пути с отношениями, имеющими одинаковые EdgeID,Так, например, с помощью LIMIT 1 я хочу вернуть только одну из вышеуказанных строк, например

(b)-[:Edge{EdgeID:123123}]->(c)-[:Edge{EdgeID:123123}]->(d)

(необязательно этот идентификатор)

с помощью LIMIT 2 Я хочу вернуть двеНапример:

(b)-[:Edge{EdgeID:123123}]->(c)-[:Edge{EdgeID:123123}]->(d)
(b)-[:Edge{EdgeID:872346}]->(c)-[:Edge{EdgeID:872346}]->(d)

Как я могу это сделать?

1 Ответ

1 голос
/ 07 июня 2019

Вы должны быть в состоянии добавить условие, что отношения в пути имеют одно и то же значение свойства:

MATCH p=(b:label{ID:"M04"})-[:Edge*2]-(d:label{ID:"S02"})
WHERE relationships(p)[0].EdgeID = relationships(p)[1].EdgeID
RETURN p LIMIT 10

И если вам нужно, чтобы этот тип ограничения был установлен для путей произвольной длины, тогдаВы можете сделать:

MATCH p=(b:label{ID:"M04"})-[:Edge*6]-(d:label{ID:"S02"})
WITH p, relationships(p)[0].EdgeID as edgeID
WHERE all(rel in tail(relationships(p)) WHERE rel.EdgeID = edgeID)
RETURN p LIMIT 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...