Проблемы с использованием операторов while и where в match в OrientDB - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблема с базой данных диаграмм OrientDB, использующей оператор while и where с предложением match.Я использую последнюю версию сообщества и работаю с OrientDB Studio.

Я построил небольшую социальную сеть, основанную на некоторых персонажах из Симпсонов.
Есть Лиза, Барт, Мэгги, Гомер, Мардж иих прародитель Эйб и Джеки. Они являются узлами в графе.Родительские отношения используются для ребер. Мардж и Гомер являются родителями Лизы, Барта и Мэгги.Эйб - родитель Гомера, а Джеки - Мардж.Таким образом, мы получаем небольшое семейное дерево.

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

Работает нормально, используя этот синтаксис:

MATCH {class:figure, as: lisa, where: (name= "Lisa Simpson")}
.in("parent"){class: figure}
.in("parent"){class: figure, as: person}
RETURN person.name

Но теперь, если я попробую только с одним определенным Edge и используя условие while для циклического обхода, я получу:

MATCH {class:figure, as: lisa, where: (name= "Lisa Simpson")}
.in("parent"){class: figure, as: person, while: ($matched.depth < 2), where:(matched.depth != 0 AND $matched.depth != 1) }
RETURN person.name

Если Лиза находится на уровне глубины 0 в качестве начального узла, ее родители должны быть на уровне 1, а ее бабушка и дедушка - на уровне 2. Похоже, что условие while работает как цикл do while.Я понял это, обратившись к родителям Лисаса, используя "$ matched.depth <1", и он все еще возвращает Лизу и ее родителей.Так что $ matched.depth <2 должно быть в порядке.</p>

В предложении where я должен написать «matched.depth! = 0 AND $ matched.depth! = 1», потому что он ничего не возвращает, если я напишу «$ matched.depth == 2» или"$ matched.depth> 1", и я не понимаю, почему.

Также возврат глубины каждого предка не работает.Это дает мне глубину 2 для всех.Я что-то упускаю или что это за поведение?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...