Neo4j gem - 查询不存在的关系

时间:2014-12-08 22:46:27

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

我还没有真正的代码,但我的反对意见

current_user.friends(:f).match_to(event)

这将返回与我的事件节点有关系的朋友。我需要的是那些没有这种关系的人。

我是否必须像在文档中那样提供它

blog.query_as(:blog).match("blog<-[:COMMENTS_ON]-(:Comment)<-[:AUTHORED]-(author:Person)").where("author.age > 30").pluck(:author)

但没关系?

类似

current_user.friends.query_as(:f).match("event<-[invite:invited]-(f:User)).where(invite: nil)

还是有另一种方式吗?

1 个答案:

答案 0 :(得分:6)

该查询不起作用,因为如果在cypher中指定MATCH,则表示该关系必须存在。你需要做的是使用WHERE子句中的匹配ascii语法(neo4j在这种情况下不情愿地支持):

current_user.friends.query_as(:friend).
  match(event: {neo_id: event.neo_id}).
  where("NOT(friend-[:invited]->(event:Event))").
  pluck(:friend)

我觉得你应该能够在第二行做match(event: event)。你可能会,但我忘了。

另请注意,match_to适用于链中的最新关联(因此,在您的第一个示例中,您将尝试将event对象与用户的一个朋友匹配,这不会不行。)