Запрос Orientdb - Найти все соединения, ведущие к вершине - PullRequest
1 голос
/ 10 февраля 2020

У меня есть следующий вариант использования в orientdb.

(V= Vertex, E=Edge)
FacebookAccount(V) -> OwnedBy(E) ->Human(V) 
TwitterAccount(V) -> OwnedBy(E) ->Human(V) 

TwitterAccount(V) OR FacebookAccount(V) -> FriendOf(E) -> TwitterAccount(V) OR FacebookAccount(V)

Я хочу посмотреть, как все люди связаны с конкретным c человеком. 1. Я не хочу видеть FacebookAccount или TwitterAccount, которые НЕ принадлежат Человеку, это должно быть скрыто: 15:2.
2. Я не хочу видеть FacebookAccount или TwitterAccount, которые являются OwenedBy a Human и не ведет к другому Human. они должны быть скрыты: 17:0, 18:0, 17:1

У меня есть следующий запрос:

traverse in("FriendOf"),out("FriendOf"), in("OwnedBy"),out("OwnedBy")  from #19:0 while $depth <= 10 

Проблема в том, что этот запрос возвращает назад учетные записи, которые не принадлежат никому, я хочу удалить это .

enter image description here

Вот полный скрипт для создания базы данных со всеми данными:

create class FacebookAccount IF NOT EXISTS extends V;
create class TwitterAccount IF NOT EXISTS extends V;
create class Human IF NOT EXISTS extends V;
create class OwnedBy IF NOT EXISTS extends E;
create class FriendOf IF NOT EXISTS extends E;

/* A */
create VERTEX FacebookAccount set user='A_FB';
create VERTEX TwitterAccount set user='A_TW';
create VERTEX Human set person='A';
CREATE EDGE OwnedBy FROM (Select from FacebookAccount where user='A_FB') TO (Select from Human where person='A');
CREATE EDGE OwnedBy FROM (Select from TwitterAccount where user='A_TW') TO (Select from Human where person='A');

/* B */
create VERTEX FacebookAccount set user='B_FB';
create VERTEX TwitterAccount set user='B_TW';
create VERTEX Human set person='B';
CREATE EDGE OwnedBy FROM (Select from FacebookAccount where user='B_FB') TO (Select from Human where person='B');
CREATE EDGE OwnedBy FROM (Select from TwitterAccount where user='B_TW') TO (Select from Human where person='B');

/* C */
create VERTEX FacebookAccount set user='C_FB';
create VERTEX TwitterAccount set user='C_TW';
create VERTEX Human set person='C';
CREATE EDGE OwnedBy FROM (Select from FacebookAccount where user='C_FB') TO (Select from Human where person='C');
CREATE EDGE OwnedBy FROM (Select from TwitterAccount where user='C_TW') TO (Select from Human where person='C');

/* X */
create VERTEX Human set person='X';
create VERTEX FacebookAccount set user='X_FB';
CREATE EDGE OwnedBy FROM (Select from FacebookAccount where user='X_FB') TO (Select from Human where person='X');

/* Y */
create VERTEX FacebookAccount set user='Y_FB';


CREATE EDGE FriendOf FROM (Select from FacebookAccount where user='Y_FB') TO (Select from FacebookAccount where user='X_FB');
CREATE EDGE FriendOf FROM (Select from FacebookAccount where user='X_FB') TO (Select from FacebookAccount where user='C_FB');
CREATE EDGE FriendOf FROM (Select from FacebookAccount where user='A_FB') TO (Select from FacebookAccount where user='B_FB');
CREATE EDGE FriendOf FROM (Select from FacebookAccount where user='B_FB') TO (Select from FacebookAccount where user='C_FB');
...