В настоящее время есть схема графа, определенная с одним типом узла и одним типом отношения. Моя цель - передать определенный подграф утилите визуализации графа для отображения, поэтому мне нужно получить все узлы и все отношения между узлами. В частности, подграф - это подграф, начинающийся в узле n и продолжающийся max_steps ребер от n .
Пока что у меня есть кое-что строки:
class Position
include Neo4j::ActiveNode
has_many :out, :next, relationship_class: :To
def get_next_subgraph( max_steps = 1 )
nodes = []
edges = []
data = self.as(:n)
.next(:m, :r, rel_length: max_steps )
.pluck(:m, :r)
data.each do |n, r|
nodes.append n
edges.append r[0]
end
return {
nodes: nodes,
edges: edges
}
end
end
, который используется примерно следующим образом:
pos = Position.find('24325')
sg = pos.get_next_subgraph()
sg[:edges].each do |edge|
edge.from_node.uuid
end
Проблема, с которой я сталкиваюсь, заключается в том, что from_node
и to_node
ленивы загруженный, neo4j.rb выполняет дополнительный запрос каждый раз, когда я пытаюсь получить доступ к uuid
определенного отношения, которое необходимо для идентификации узла на каждом конце ребра. Итак, мне нужно либо сопоставить from_node
и to_node
с соответствующими узлами (которые уже возвращены с запросом), либо каким-либо другим способом получить from_node
/ to_node
uuids
.
У меня есть несколько других идей о том, как это сделать, но я потратил достаточно времени на то, что кажется достаточно распространенным паттерном, и мне кажется, что я что-то упускаю.
Итак, вкратце, каков правильный / идиоматический c способ использования neo4j.rb для извлечения подграфа в одном запросе?
(Для контекста это в конечном итоге будет отправлено обратно в ответ на GraphQL запрос.)