2016-11-25 34 views
0
class Invitation 
    include Neo4j::ActiveNode 
    property :email 
end 

这是新节点邀请节点我可以看到它在图形数据库。 - 如果我在里面加入一些新的领域,现有的节点也不会在图形数据库 反映 - 如果我创建一个新的节点,我可以看到它在图形数据库的Rails的Neo4j如何在现有的数据库中添加新的领域

所以,问题是,如果我要加一个场假设

property :valid, type: Boolean, default: true

如何添加,这样我可以在图形数据库中现有节点???看到,同样喜欢我们活动记录迁移

我已经加场做节点

property :vish, type: Boolean, default: true

所以,当查询

Invitation.where(vish: true).count ==>结果0

如果我添加新节点Invitation.create(电子邮件: '[email protected]')

然后运行查询

Invitation.where(vish: true).count ==>结果1

这是我得到

+0

我认为这是重复的... http://stackoverflow.com/questions/35255540/neo4j-add-update-properties-if-node-exists – tebayoso

+0

@JorgedelosSantos如果我在轨道纯粹做的情况下得到的答案它将包装 –

+0

是的,问题是一样的,neo4j不处理迁移,你不需要在所有节点上添加一些东西。我没有阅读'property'方法代码,但我确信它会做这样的事情:'value.present?值:default_value' – tebayoso

回答

1

简短的回答将是没有确切的问题:有没有办法搜索在持久节点未申报的属性值。

编辑:

他们还说像行为移民可能适合当前需求的宝石。

http://neo4jrb.readthedocs.io/en/latest/Migrations.html

发现答案:

节点应被视为存储在他们里面的属性文件。我们在这里处理的是Cypher查询和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,并链接此问题以获得解决方案。

+0

这个https://github.com/neo4jrb/neo4j/wiki/Neo4j -v3-Migrations –

+0

正如我的答案所述,您只需声明模型中的属性,不需要迁移就可以向节点添加属性:http://neo4jrb.readthedocs.io/en/7.2.x/ Properties.html#undeclared-properties – tebayoso

+0

是的,我做了同样的但查询出错,因为以前的记录不拾取值默认值:true ..............我已经添加了情况在问题,即使我打开neo4j Web UI,然后我看不到节点中的新字段,我看到是否创建了全新的对象 –

相关问题