Опция rel_length в Neo4j.rb не работает должным образом
Это похоже на этот вопрос, но в моем случае версия гема 'neo4j-core' обновлена с 7.0.4 до 8.1.0, а 'neo4j' 8.0.7 -> 8.3.4.
class Person
include Neo4j::ActiveNode
has_one :out, :ancestor, rel_class: :HasFather
end
class HasFather
include Neo4j::ActiveRel
from_class :Person
to_class :Person
type 'HAS_FATHER'
end
Есть метод "показать", где у меня есть код
@ancestors = @person.ancestor(rel_length: 1..4)
До обновления он работал отлично и метод возвращал массив с 4 людьми. Но теперь к нему вернется только один человек.
Person#ancestor
MATCH (previous:`Person`)
WHERE (ID(previous) = {ID_previous})
OPTIONAL MATCH (previous)-[rel1:`HAS_FATHER`]->(next:`Person`)
RETURN
ID(previous),
collect(next) | {:ID_previous=>38}
ETHON: performed EASY effective_url=http://localhost:7474/db/data/transaction/commit response_code=200 return_code=ok total_time=0.01983900000000005
@ancestors = #<AssociationProxy Person#ancestor [#<Person uuid: "f4454bcb-ffc8-4050-a486-0e7172ea864a", generation: nil, name...
2 ответа
Я смотрю на это, но мне любопытно, что происходит, когда вы делаете это:
@ancestors = @person.ancestor(nil, nil, rel_length: 1..4)
Я смотрю на разницу между 8.1.5 и 8.2.1, и это, кажется, в основном вокруг with_associations
, я точно уверен rel_length
после 8.2.x в целом все еще работает, но если эта строка кода не работает, то, возможно, я ошибаюсь в этом....
Этот запрос шифра не показывает отношение переменной длины. Если предположить, previous
есть только один отец, вы всегда собираете на одном узле самое большее.
Вы можете пересмотреть синтаксис для шаблонов переменной длины:
OPTIONAL MATCH (previous)-[rel1:`HAS_FATHER`*..4]->(next:`Person`)