2012-04-12 9 views
1

Ich teste mit einer einfachen Variante eines funktionierenden Neographie-Beispiels, und während der Filter scheint, als ob es funktionieren sollte, habe ich kein Glück. Ich kann nach position.length filtern und es funktioniert gut, aber ich versuche jetzt, basierend auf einer Knoteneigenschaft zu filtern.Filtern nach Eigenschaftswert mit Hilfe von Neographie

Unter diesen Knoten:

node1 = Neography::Node.create("name" => "node1") 
node2 = Neography::Node.create("name" => "node2") 
person1 = Neography::Node.create("name" => "Person1", "role" => "author") 
person2 = Neography::Node.create("name" => "Person2", "role" => "author") 
person3 = Neography::Node.create("name" => "Person3", "role" => "editor") 
Neography::Relationship.create(:user, node1, person1) 
Neography::Relationship.create(:user, node2, person2) 
Neography::Relationship.create(:user, node1, person3) 
Neography::Relationship.create(:user, node2, person3) 

Mit "DER_KNOTEN" auf person1, ich versuche, dieses zu erhalten Person3 zurückzukehren:

the_node.both(:user). 
    order("breadth first"). 
    uniqueness("node global"). 
    #filter("position.length() == 2;"). 
    filter("currentNode.getProperty('role') == 'editor';"). 
    depth(2). 
    map{|n| n.name}.join(', ') 

Die kommentierten-out-Filter kehrt wie erwartet Person3 (Beziehung der zweiten Ebene), aber der Filter, der auf der Eigenschaft 'role' basiert, scheint alles zu filtern, so dass das Ergebnis leer ist.

Alle Vorschläge wären grandios; Ich bin definitiv neu in Neo4j und Neographie.

Antwort

0

anstelle des Traversal Endpunkt, würde ich in Chiffre betrachten, sehen http://docs.neo4j.org/chunked/snapshot/cypher-query-lang.html, die von Neography unterstützt wird

Ihre Anfrage würde dann

+0

Vielen Dank so etwas wie

start user = node(1) match user-[:user]->person where person.role = "editor" return person.name 

HTH sein. Ich hatte Cypher angeschaut, also bin ich zurück gegangen, aber es funktioniert nicht ganz. Nur zum testen habe ich es weiter vereinfacht: – Masonoise

+0

Sorry, die Formatierung ist total durcheinander, lass es uns nochmal versuchen. Ich hatte Cypher angeschaut, also bin ich zurück gegangen, aber es funktioniert nicht ganz. Nur um es zu testen, habe ich es weiter vereinfacht: 'cypher_query =" START mich = knoten ({node_id}) " cypher_query <<" MATCH mich - [: user] -> (person) " cypher_query <<" RETURN person.name " neo.execute_query (cypher_query, {: node_id => node_id})' Aber es kommt nil zurück, was mich ein wenig ratlos hat ... Danke nochmal. – Masonoise

+0

Okay, ich habe gerade herausgefunden, dass die Beziehungen unidirektional waren, so dass es nicht ganz funktionierte, und ich reparierte das und es funktioniert! Aber jetzt versuche ich, das Äquivalent von Tiefe (2) zu arbeiten, um die Person durch den Verbindungsknoten zu bringen, ohne Glück. Sollte das nicht funktionieren: 'cypher_query <<" MATCH mich - [: user] -> (n) - [: user] -> (person) "'. Nochmals vielen Dank für irgendwelche Ideen. – Masonoise