【问题标题】:Neo4j gem - Detailed Querying direction with has_many: bothNeo4j gem - has_many 的详细查询方向:两者
【发布时间】:2014-11-26 23:15:50
【问题描述】:

我能够通过这个原始问题Neo4j gem - Preferred method to deal with admin relationship 进行特定的模式匹配

Event.query_as(:event).match("(event)<-[invite:invited]-(user1:User)<-[friends_with:friends_with]-(user2:User)").where('invite.admin = true').pluck(:event)

我无法获得这样的修改版本来工作

current_user.friends.events.query_as(:event).match("(event)<-[invite:invited]-(user:User)").where(invite: {admin: true}).pluck(:event)

所以我真正改变的是我在邀请课程中改变了from_nodeto_node 的方向

  from_class User
  to_class   Event
  type 'invited'

之前设置为从EventUser。我的一个问题是,为什么我必须改变它才能使查询工作? has_many: both 不是意味着方向无关紧要吗?

另一个变化是将我的关系类型更改为小写。在我的模型中,它是用所有小写字母写的,这似乎很重要。我认为两者都会像neo4j那样转换为全大写,但就目前而言,它没有。

我确实认为我需要让 current_user 方法工作,因为我只想要 current_user 朋友的事件。有什么建议吗?

【问题讨论】:

  • has_many :both 在使用 QueryProxy 时创建了一个无方向的匹配,但每个关系仍然有一个方向。如果您使用 :both 关联创建 rel,例如 user1.friends &lt;&lt; user2,它将创建从 user1 到 user2 的 rel。
  • 所以只有 queryproxy 没有方向性,但不是这样的?
  • 如果您正在编写自己的密码查询,则需要知道关系的方向,否则您将省略箭头以表示双向匹配。 current_user.friends.events.query_as(:event).match("(event)-[invite:invited]-(user:User)").where(invite: {admin: true}).pluck(:event)

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


【解决方案1】:

好的,我混淆了两种不同风格的查询

例如,当您已经链接到 lesson 时,他们会在文档中提供此信息

s.lessons(:l, :r).where("r.start_date &lt; {the_date} and r.end_date &gt;= {the_date}").params(the_date: '2014-11-22').pluck(:l)

还有这样的

Student.query_as(:s).where("s.age < {age} AND s.name = {name} AND s.home_town = {home_town}").params(age: params[:age], name: params[:name], home_town: params[:home_town]).pluck(:s)

注意您放置 .query_aslessons(:l, :r) 部分的位置

我的最终查询消除了任何match 组件,因为我已经在我正在查询的关系和节点处。所以它看起来像这样。

current_user.friends.events(:event, :rel).where("rel.admin = {admin_p} AND event.detail = {detail_p}").params(admin_p: true, detail_p: true).pluck(:event)

尽管如此,我仍然想回答我上面的一些问题!

【讨论】:

  • 您无需为此致电pluckeachfirst 等...都会为您提供链中的最后一个链接::event
猜你喜欢
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多