2017-02-17 11 views
-1

У меня есть двойное отношение (вершина D) - [rel1] -> (вершина БД) - [REL2] (вершина D)Neo4j ShortestPath С двумя соотношениями

мне нужна shortestPath между двумя элементами с помощью D с помощью этого отношения

пробуется

MATCH (d:D{d_pk:1})-[r1:DgoDB*]->() 
MATCH p = allShortestPaths((ALL (RELATIONSHIP IN r1)->()) - [r2:DBgoD*] -> (to:D)) 
WHERE (to.d_pk = 70258) 
RETURN d, r1, p 

но, но это не сработало.

У кого-нибудь есть идеи?

+0

Можете ли вы уточнить свой узор немного больше? Является ли путь, который вы хотите найти, состоящий из обоих видов отношений (: DgoDB и: DBgoD) в любом порядке? Или это первый путь только: отношения DgoDB, а затем остальная часть пути: отношения DBgoD? Или это совсем другое? – InverseFalcon

+0

Исходная база данных является реляционной. Существует отношение 3-го класса [linked_to] между двумя элементами таблицы Person и элементом таблицы Type. Эта связь говорит, что элемент Лица связан с другим элементом Личности и имеет тип Тип, друг, отец, сын, мать, одноклассник и т. Д .; В моделировании для баз данных графа Person создала вершину D, тип Вершина B и [связанная_то] связь возникла с вершиной DB и ребрами [DgoDB], [DBgoB] и [DBgoD]. Теперь мне нужно было найти кратчайший путь между двумя элементами D, поэтому мне нужно перейти с D-> DB, а затем DB-> D –

+0

Я все еще пытаюсь разобрать это. Тем временем, это хорошая идея, чтобы выбрать метки узлов и типы отношений, которые имеют некоторое фактическое значение в соответствии с тем, что вы на самом деле моделируете. Графические базы данных, как правило, лучше разбирают смысл ваших данных и то, как они связаны, но выбор ярлыков и типов, которые слишком абстрагированы от того, что на самом деле моделируется, не позволяет понять эти значения и соединения. – InverseFalcon

ответ

0

Если я правильно понимаю вашу модель (и любое дополнительное разъяснение более чем приветствуется), вы ищете пути: отношения DgoDB и: DBgoD для достижения другого узла.

При условии, что только: отношения DgoDB соединяются: D с: узлами базы данных и только: отношения DBgoD соединяются: DB с: D узлами, тогда этого должно быть достаточно, чтобы указать, что шаблон переменной длины, который вы ищете для включает в себя оба набора отношений.

Что-то вроде этого, может быть?

MATCH (d:D{d_pk:1}), (to:D{d_pk:70258}) 
MATCH p = allShortestPaths((d)-[r1:DgoDB|:DBgoD*]->(to)) 
RETURN d, r1, p 
+0

спасибо, это правильно –

+0

Я изучаю четыре разных метода моделирования графических баз данных, и я преобразовал реляционную базу данных через четыре метода, и теперь я выполняю запросы на четырех базах. В моделирующей вершине B заменялись параметрами в отношении, которое оставалось DgoD, и там стало легче –