2016-03-22 5 views
1

Mit ActiveNode, wie kann ein Benutzer nur den Namen oder nur Name und Beschreibung für einen Knoten ziehen?neo4jrb: Ziehen nur gewünschte Eigenschaften für die Leistung

Beispiel basierend auf https://github.com/neo4jrb/neo4j/wiki/Search-and-Match

Lassen Sie uns das Modell erweitern, wie folgt:

class Lesson 
    include Neo4j::ActiveNode 
    property :scheduled_time 

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

Wenn die gewünschte Information „? Welche anderen Zeiten dieser Lehrer Unterricht Schüler ist“, wir brauchen nur die Zeiten von jedem Lektion. Wie verwenden wir Neo4jrb, um die CYPHER-Abfrage nur für diese Eigenschaften durchzuführen?

+0

(Und für Bonuspunkte: Bring diese Eigenschaften in einem einzigen Array) – joshfindit

Antwort

1

Ich möchte für die Option die gewünschten Felder auswählen und sie als Modellobjekte zurückgeben. Aber ich glaube nicht, dass das, was Sie fordern (zum Glück, denn es ist noch nicht da ist;)

So glaube ich pluck ist, was Sie wollen:

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

Dies wird die entsprechenden Cypher erzeugen und ein Array von scheduled_time Werten zurückgeben.

Dies könnte in der Tat ein einfacher Weg, es zu tun:

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

Und normalerweise, wenn alle Bedingungen waren in einem einzigen MATCH dies funktionieren soll, weil Cypher in einem die gleiche Beziehung durchquert nicht immer zweimal single MATCH. Die Assoziationsverkettungssyntax erzeugt jedoch mehrere MATCH Klauseln. Es wurde tatsächlich verwendet, um eine einzige MATCH zu generieren, aber es gab Probleme damit (die mir im Moment entgehen).

Für eine tiefe gehende Erklärung über einzelne vs mehreren Übereinstimmungen finden Sie auf diese Frage SO:

What does a comma in a Cypher query do?

Verwandte Themen