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
是按字面意思传递的。 所以你不能这样做。
我代表您在存储库中打开了一个问题 ,并将此问题链接起来以获得解决方案。