Как преобразовать возвращенные узлы при поиске пути в Neo4j? - PullRequest
0 голосов
/ 14 марта 2020

У меня приложение , где я загружаю кучу электронных книг вместе с метаданными в Neo4j с целью создания дерева каталогов IPFS для ввода в другого приложения .

Это приложение rails, поэтому у меня есть класс Book:

class Book 
  include Neo4j::ActiveNode
  property :title, type: String
  property :author, type: String
  property :created_at, type: DateTime
  property :updated_at, type: DateTime

  has_many :in, :contexts, type: :FOR
  has_one :out, :cover, type: :CVR, model_class: :Content
  has_one :out, :content, type: :DAT
end

В задаче rake для экспорта в IPFS я использую следующее чтобы выполнить запрос:

q = Neo4j::ActiveBase.current_session.query(
  "MATCH path = (n:Context)-[s:SUB*]->(m:Context)-[f:FOR]->(o:Book) WHERE n.name = '∅' RETURN DISTINCT path LIMIT 500"
)

Это возвращает пути, которые я хочу, но q.first.path.nodes.first (и все другие узлы) Neo4j::Core::Node s. Я хочу получить доступ к отношениям cover и content моего класса Book, но не могу. Например:

q.each do |ret|
  nodes = ret.path.nodes
  nodes.shift # remove ∅
  book = nodes.pop
  path = nodes.map(&:name)
  if book.content
    system('ipfs', 'files', 'cp', "/ipfs/#{book.content.ipfs_id}", "/#{path.join('/')}/index.epub")
  end
  ⋮

1 Ответ

0 голосов
/ 14 марта 2020

Один из вариантов - использовать uuid для поиска книги:

book = Book.find(nodes.pop.properties[:uuid])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...