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
这是我得到的确切问题
答案 0 :(得分:1)
简短回答是否:无法在持久化节点中搜索获取未声明的属性值。
<强>编辑:强>
他们为宝石添加了类似于迁移的行为,可能符合您当前的需求。
http://neo4jrb.readthedocs.io/en/latest/Migrations.html
发现回答:
节点应被视为存储其中属性的文档。我们在这里处理的是Cypher Query和public interface Product {
double getPrice();
}
class ProductA implements Product {
public double getPrice() {
// implementation
}
}
// ...same for ProductB
public class GeneralProduct {
String label;
Product product;
public GeneralProduct(String label, Product product)
{
this.label = label;
this.product = product;
}
// You might have something like this, or not
public double getProductPrice() {
return this.product.getPrice();
}
}
// Then using it:
auxList.add("ProductA", new ProcuctA("ProductA"));
auxList.add("ProductB", new ProcuctB("ProductB"));
的实现,它不仅忽略了属性的默认值。
这很容易测试:
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')
=> #<QueryProxy CYPHER: "MATCH (result_user:`User`) WHERE (result_user.title = {result_user_title})">
并获得结果,这意味着Cyper
它表示仅用于设置和获取属性,但被查找程序忽略。
可能有解决方法,实际上是缺少Neo4j gem中的实现:
您可以按Cyper连接器中的值数组进行搜索,但不能正确解析值:
Neo4j::ActiveNode#where
正如您在上一个查询中所看到的,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
按字面意思传递。所以你不能这样做。
我代表您在存储库中打开了Issue,并将此问题链接起来以获得解决方案。