Neo4j gem - 查询特定关系

时间:2014-11-22 00:49:16

标签: ruby-on-rails neo4j neo4j.rb

有很多方法可以获取节点和关系的模式,甚至可以根据关系属性自己查找关系(例如EnrolledIn.where(since: 2002)但是根据节点的特定属性获取关系的最佳方法是什么例如

current_user - [:relationship] - > event

我知道事件ID,所以对我来说,最合乎逻辑的方法是使用event.id查询模式作为被搜索的属性之一。我现在有类似的东西

event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)

以上不起作用,它返回一个数组

1 个答案:

答案 0 :(得分:0)

您正在做的事情很好,pluck(:rel)将始终返回一个数组。如果你知道你只想要一个rel,那就做吧

event_rel = current_user.events(:e, :rel).where(id: event_id).limit(1).pluck(:rel).first

如果你正在使用github的主分支,你可以使用first_rel_to方法,它(以及match_to)正在改变我最近使用gem的方式。

event_rel = current_user.events.first_rel_to(event_id)

几天前添加了为其提供ID的功能,如果您从Rubygems中撤出,它将无法工作。 3.0.4中的方法版本不接受ID,它只接受完整节点。如果您碰巧加载了节点,则可以在已发布的版本中执行event_rel = current_user.events.first_rel_to(event)

如果你不想使用pluck,你可以event_rel = current_user.events.where(id: event_id). limit(1).each_rel.first。请注意,如果省略limit(1),那将会将这两个节点之间的所有相关内容返回给Ruby,所以除非您知道自己只是要获得一个,否则不要使用它背部。我通常在我这样做的时候添加limit(1),即使我只是认为我会让一个人回来,因为我喜欢安全。

我建议你将你的Gemfile指向Github中最近的提交,只需阅读wiki中关于4.0中的更改的新部分。它很稳定,新功能非常酷。