Rails Neo4j如何在现有数据库中添加新字段

class Invitation include Neo4j::ActiveNode property :email end 

这是Neo node Invitation节点我可以在图形数据库中看到它。 – 如果我在其中添加一些新字段,对于现有节点,它将不会反映在图形数据库中 – 如果我创建一个新节点,我可以在图形数据库中看到它

所以问题是我是否必须添加一个字段

property :valid, type: Boolean, default: true

我如何添加这个以便我可以在图数据库中的现有节点中看到它,就像我们在活动记录迁移中一样

我在Node中添加了字段

property :vish, type: Boolean, default: true

所以当查询

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

如果我添加新节点Invitation.create(email:’urvishh@gmail.com’)

然后运行查询

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

这是我得到的确切问题

简短的回答是否:没有办法在持久化节点中搜索未声明的属性值。

编辑:

他们为gem添加了类似于Migration的行为,可能符合您当前的需求。

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

发现答案:

应将节点视为存储其中属性的文档。 我们在这里处理的是Cypher Query和Neo4j::ActiveNode ,它不仅忽略了属性的默认值。

这很容易测试:

 class User include Neo4j::ActiveNode property :name, type: String property :email, type: String, default: 'example@example.com' end 

然后创建两个节点:

 User.create(name: 'John', email: 'john@cena.com' User.create(name: 'John') 

我们尝试搜索未声明的属性

 > User.where(title: 'Mr') => # 

我们有效地调用Cyper并获得结果,这意味着模型中的属性声明根本没有在Neo4j::ActiveNode#where

它意味着仅用于设置和获取属性,但被查找者忽略。

可能有解决方法,实际上缺少Neo4j gem中的实现:

您可以按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是按字面意思传递的。 所以你不能这样做。

我代表您在存储库中打开了一个问题 ,并将此问题链接起来以获得解决方案。