Как получить все подключенные узлы в neo4j
3 ответов
на основе вашего комментария:
Я хочу получить список всех подключенных узлов. Например, в выше случай, когда я ищу подключенные узлы для 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'
чтобы получить тот же эффект.