neo4jrb:为性能提取所需的属性

时间:2016-03-22 18:52:27

标签: ruby-on-rails neo4j

使用ActiveNode,用户如何只提取名称,或仅提取节点的名称和描述?

基于https://github.com/neo4jrb/neo4j/wiki/Search-and-Match

的示例

让我们按如下方式扩展模型:

class Lesson
  include Neo4j::ActiveNode
  property :scheduled_time

  has_many :in, :students, origin: :lesson
  has_many :out, :teachers, type: 'taught_by'
end

如果所需信息是“该学生的老师还在教什么时间?”,我们只需要每课的时间。 我们如何使用Neo4jrb对这些属性进行CYPHER查询?

1 个答案:

答案 0 :(得分:1)

我想选择您想要的字段并将它们作为模型对象返回。但我不认为这就是你所要求的(幸运的是,因为它还没有;)

所以我相信pluck就是你想要的:

student.lessons(:student_lesson).teachers.lessons(:other_lesson).where('student_lesson <> other_lesson').pluck(:scheduled_time)

这将生成适当的Cypher并返回scheduled_time值的数组。

这实际上可能是一种更简单的方法:

student.lessons.teachers.lessons.pluck(:scheduled_time)

通常如果所有条件都在一个MATCH中,这应该可行,因为Cypher不会在一个MATCH中两次遍历相同的关系。但是,关联链语法会生成多个MATCH子句。它实际上用于生成单个MATCH,但有一些问题(目前让我逃避)。

有关单次与多次匹配的更深入解释,请参阅此SO问题:

What does a comma in a Cypher query do?