Я хочу получить список всех подключенных узлов, начиная с узла 0, как показано на диаграмме.
Как получить все подключенные узлы в neo4j
- Можно немного точнее? какой результат вы хотите получить? 11.07.2017
- Я хочу получить список всех подключенных узлов. Например, в приведенном выше случае, когда я ищу подключенные узлы для 0, он должен возвращать узлы-1,2,3. 11.07.2017
Ответы:
На основании вашего комментария:
Я хочу получить список всех подключенных узлов. Например, в приведенном выше случае, когда я ищу подключенные узлы для 0, он должен возвращать узлы-1,2,3.
Этот запрос сделает то, что вы хотите:
MATCH ({id : 0})-[*]-(connected)
RETURN connected
Приведенный выше запрос вернет все узлы, связанные с узлом с id=0
(я считаю, что числа внутри узлов являются значениями свойства id) на любой глубине, в обоих направлениях и с учетом любого типа отношений. Взгляните на раздел Отношения в деталях документов.
Хотя это будет хорошо работать для небольших графиков, обратите внимание, что это очень дорогая операция. Он будет проходить по всему графу начиная с начальной точки ({id : 0})
с учетом любого типа отношений. Это действительно не очень хорошая идея для производственных сред.
Если вы хотите сопоставить узлы, имеющие отношение к другому узлу, вы можете использовать это:
MATCH (n) MATCH (n)-[r]-() RETURN n,r
Он вернет вам все узлы, имеющие отношение к другому узлу или узлам, независимо от направления отношения.
Если вы хотите добавить ограничение, вы можете сделать это следующим образом:
MATCH (n:Label {id:"id"}) MATCH (n)-[r]-() RETURN n,r
Для более крупных или сильно взаимосвязанных графов APOC-процедуры предлагают более эффективные средства. обхода, который возвращает все узлы в подграфе.
Как уже упоминалось, лучше всего использовать метки на ваших узлах и добавить либо индекс, либо уникальное ограничение свойства label+ для быстрого поиска вашего начального узла.
Используя метку «Label» и параметр idParam
, запрос для получения узлов подграфа с APOC будет выглядеть так:
MATCH (n:Label {id:$idParam})
CALL apoc.path.subgraphNodes(n, {minLevel:1}) YIELD node
RETURN node
Узлы будут разными, и начальный узел не будет возвращен вместе с остальными.
РЕДАКТИРОВАТЬ
В настоящее время существует ограничение, запрещающее использование minLevel
в subgraphNodes()
, вы можете либо самостоятельно отфильтровать начальный узел, либо использовать apoc.path.expandConfig()
, используя uniqueness:'NODE_GLOBAL'
, чтобы получить тот же эффект.
MATCH (root {id : 0})-[*]-(connected) WHERE root <> connected RETURN distinct connected
11.07.2017