【发布时间】:2017-09-28 20:49:52
【问题描述】:
class Picture
property :name
property :user_ids
serialize :user_ids
end
Picture.create(name: '1', user_ids: [1,4,5])
如何在 user_ids 属性中查找用户 id 为 1 的所有图片
我正在尝试这种方式:
Picture.as(:p).where('ALL(x IN [1] WHERE x IN p.user_ids)')
Neo4j.rb 版本 - neo4j (8.0.13)
Neo4j - 3.1.1 Enterprise
但它不起作用。或者有任何更好的方法来存储数组并查询它,任何帮助都会非常可观
编辑:上面显示了布鲁诺的示例和我的节点描述我使用了示例节点
@Bruno 示例运行良好。
这是我的 Neo4j 节点视图
match (p:Place) where ALL(x IN [14] WHERE x IN p.from_airport_ids) return p
这在我的情况下不起作用
class Place
include Neo4j::ActiveNode
property :name
property :from_airport_ids
serialize :from_airport_ids
end
通过 API 创建地点
{
"place":{
"name":"Name",
"from_airport_ids":[14,44,67]
}
}
是否与我的数组值在节点中的存储方式以及@Bruno 示例值的存储方式有关?
【问题讨论】:
-
Bruno 的解决方案可能是最好的,但我怀疑您的解决方案不起作用的原因是因为您使用的是
ALL。我认为ANY会更好 -
@BrianUnderwood 我用
create(:Picture{name: '1', user_ids: [1,4,5]})创建了一个节点,执行了查询MATCH (p) where ALL(x IN [1] WHERE x IN p.user_ids) return p并工作了。但我同意你的观点,使用 IN 运算符的方法至少更具可读性。 -
@BrianUnderwood 也许有一些错误消息没有通知
-
我编辑了问题并提供了更多信息,我可以看到@bruno 给出的示例运行良好。但在我的情况下,数组值存储在节点 [1,2,3] 与 1,23 中的方式有所不同
-
@BrianUnderwood 我认为问题出在 Neo4j.rb 中,当我使用序列化存储数组时,它在 neo4j 中存储为字符串。所以我无法查询它。如果我删除序列化然后保存,它将作为数组存储在 Neo4j 中,但是当我发现它像
Place.find(uuid)时,它在 Neo4j 库中给出错误TypeError: no implicit conversion of Array into String
标签: ruby-on-rails neo4j cypher neo4j.rb