Короткий ответ будет Нет: нет никакого способа Поиска для необъявленных значений свойств в сохранялось узлов.
Отредактировано:
Они добавили миграции, как поведение для драгоценных камней, которые могли бы соответствовать вашим текущим потребностям.
http://neo4jrb.readthedocs.io/en/latest/Migrations.html
Discovery Ответ:
Узлы должны рассматриваться как документы, которые хранит свойства внутри них. Здесь мы имеем дело с реализацией Cypher Query и Neo4j::ActiveNode
, который не только игнорирует значения по умолчанию для свойств.
Это можно легко проверить:
class User
include Neo4j::ActiveNode
property :name, type: String
property :email, type: String, default: '[email protected]'
end
Затем создайте два узла:
User.create(name: 'John', email: '[email protected]'
User.create(name: 'John')
Мы пытаемся искать необъявленной собственности значения:
> User.where(title: 'Mr')
=> #<QueryProxy CYPHER: "MATCH (result_user:`User`) WHERE (result_user.title = {result_user_title})">
Мы эффективно называем Cyper
и получить результаты, это меня что декларация свойства в модели вообще не используется в Neo4j::ActiveNode#where
Это означает, что она используется только для установки и получения свойств, но игнорируется искателями.
Там может быть обходными, что фактически отсутствуют реализации в жемчужине Neo4j:
Вы можете осуществлять поиск по массиву значений в разъеме Cyper, но не разбор правильно значений:
User.where(another_field: nil).count
CYPHER 39ms MATCH (result_user:`User`) WHERE (result_user.another_field IS NULL) RETURN count(result_user) AS result_user
=> 100
User.where(another_field: ['Something', nil]).count
CYPHER 12ms MATCH (result_user:`User`) WHERE (result_user.another_field IN {result_user_another_field}) RETURN count(result_user) AS result_user | {:result_user_another_field=>["Something", nil]}
=> 0
Как вы можете видеть в последнем запросе, nil
передается буквально. Поэтому вы не можете этого сделать.
Я открыл в вашем репозитории Issue и связал этот вопрос, чтобы получить решение.
Я думаю, что это дублируется ... http://stackoverflow.com/questions/35255540/neo4j-add-update-properties-if-node-exists – tebayoso
@JorgedelosSantos, если я получу ответ в контексте рельсов, это wil wrapper –
Да, проблема такая же, neo4j не обрабатывает миграции, вам не нужно добавлять что-то по всем узлам. Я не читал код 'property'method, но я уверен, что он сделает что-то вроде:' value.present? value: default_value' – tebayoso