Cypher запрос, чтобы получить все этикетки, которые имеют более 2 узлов
Вопрос
У меня есть график, в котором каждый подключенный компонент имеет определенную ярлык, скажем, Comp1, Comp2 и т. Д. Я хочу сделать Cyper Query, который возвращает все этикетки, которые имеют более одного узла. Я получаю все этикетки, как это:
match (n) return labels(n)
.
Поэтому я попытался сделать что-то вроде этого, чтобы получить только этикетки, которые мне нужно:
match (n) with labels(n) as lb where count(k:lb[0]) >= 2) return lb limit 10
.
Но я получаю синтаксисную ошибку:
Неверный ввод ')': ожидаемые цифры, '.', 'E', пробелы, узловые метки, «[», «= ~», В том, есть, «*», «/», «%», «^ ',' + ',' - ',' <','> '," <=",">=", '=', "<>", "!=", И, XOR, или, загружайте CSV, начать, матч, расслабиться, слияние, Создать, установить, удалять, удалить, foreach, с, return, Union, ';'или конец ввода (линия 1, столбец 57)
Я также хотел бы заказать этикетки по количеству узлов, которые имеют эту метку ...
Решение
с 2.1
match (n)
unwind labels(n) as l
with l,count(*) as cnt
where cnt > 2
return l
. Другие советы
Если вы делаете это с Neo4j версии 2.0, вы можете добиться того, что вы хотите с этим Cyper Query:
Start n=node(*)
match (n)-->() with n,count(*) as rel_cnt where rel_cnt >= 2 return n;
.
Но имейте в виду, что этот запрос повернет весь график, так что это, вероятно, является хорошей идеей, чтобы ограничить его определенным этикеткам.Ура.
<Сильное> Обновление
Я прочитал вопрос как узлы с более чем 1 отношением, мой плохой.Этот запрос не сделает, что спросил ОП.