Порядок взаимных узлов по вхождению orientdb
Я пытаюсь выполнить следующий запрос графа в orientdb, и он работает
select nearTo as c1,nearTo.id,nearTo.name, count(nearTo) as repetition,level,path from (
MATCH {class: GNode, where: (id = 5)}
-has-> {as: connection, while: ($depth <= 1), where: ($depth <= 1)}
-has-> {as: nearTo, while: ($depth < 3), where: ($depth > 1), depthAlias: level,pathAlias: path}
RETURN nearTo,level,path
)
group by nearTo order by repetition desc
Проблема с этим запросом заключается в том, что он также соответствует узлам в соединении, если соединение возвращается, поэтому я попробовал следующие запросы, и ни один из них не сработал.
1)
select nearTo,nearTo.id,nearTo.name, count(nearTo) as repetition,level,path from (
MATCH {class: GNode, where: (id = 5)}
-has-> {as: connection, while: ($depth < 2), where: ($depth <= 1)}
-has-> {as: nearTo, while: ($depth < 4), where: ($depth > 1), depthAlias: level,pathAlias: path}
RETURN nearTo,level,path
) where nearTo not in [connection]
group by nearTo order by repetition desc
2)
select nearTo,nearTo.id,nearTo.name, count(nearTo) as repetition,level,path from (
MATCH {class: GNode, where: (id = 5)}
-has-> {as: connection, while: ($depth < 2), where: ($depth <= 1)}
-has-> {as: nearTo, while: ($depth < 4), where: ($depth > 1), depthAlias: level,pathAlias: path}
RETURN nearTo,level,path
) where nearTo not in [(MATCH {class: GNode, where: (id = 5)}
-has-> {as: c, while: ($depth < 2), where: ($depth <= 1)} RETURN c)]
group by nearTo order by repetition desc
3)
select nearToFinal,nearToFinal.id,nearToFinal.name, count(nearToFinal) as repetition,level,path from (
MATCH {class: GNode, where: (id = 5)}
-has-> {as: connection, while: ($depth < 2), where: ($depth <= 1)}
-has-> {as: nearTo, while: ($depth < 4), where: ($depth > 1), depthAlias: level,pathAlias: path}
-has-> NOT {as:nearToFinal}
RETURN nearToFinal,level,path
)
group by nearToFinal order by repetition desc
В качестве альтернативы приведенный ниже запрос дает мне отрицательный результат, но не может упорядочить на основе повторения, поскольку псевдоним не поддерживается для предложения from.
select * from (TRAVERSE out("has") FROM #27:1 MAXDEPTH 4 STRATEGY BREADTH_FIRST) where @rid NOT IN (TRAVERSE out("has") FROM #27:1 MAXDEPTH 1)
Буду признателен за любую оказанную помощь. Тот же случай с запросом гремлина тоже подойдет.