Neo4j Cypher: как перебрать результат ExecutionResult - PullRequest
8 голосов
/ 28 декабря 2011

В этом коде, как я могу перебрать все узлы в результате ExecutionResult?

CypherParser parser = new CypherParser();
ExecutionEngine engine = new ExecutionEngine( graphDb );
Query query = parser.parse( "START n=node(2) MATCH (n)<-[:IS_A]-(x) RETURN x" );
ExecutionResult result = engine.execute( query );
// iterate over nodes in result and print all properties

Ответы [ 4 ]

9 голосов
/ 29 декабря 2011

Javadoc для Cypher не очень ясно об этом, возможно, потому что нет никакого.

Итак, я заново создал ваш код в «пробной версии», которая демонстрирует, как перебирать свойства узлов в совпадении. Домен - это виды фруктов, где каждый вид связан с узлом «фрукты». Соответствующий фрагмент после этого запроса:

    Iterator<Node> kindsOfFruit = result.columnAs("x");
    while (kindsOfFruit.hasNext()) {
        Node kindOfFruit = kindsOfFruit.next();
        System.out.println("Kind #" + kindOfFruit.getId());
        for (String propertyKey : kindOfFruit.getPropertyKeys()) {
            System.out.println("\t" + propertyKey + " : " +
               kindOfFruit.getProperty(propertyKey));
        }
    }

Это ключ result.columnAs("x"). Умно названный параметр String n ссылается на «имя столбца» в предложении результата. В этом примере мы хотим, чтобы столбец «x» содержал Node объектов, поэтому мы можем прямо присвоить Iterator<Node> и затем использовать его.

Если столбец не может быть найден, мы получим org.neo4j.graphdb.NotFoundException.

Если мы попросим присвоить неправильный класс, мы получим обычный java.lang.ClassCastException.

Полный рабочий пример доступен здесь: https://github.com/akollegger/neo4j-trials/blob/master/src/test/java/org/akollegger/neo4j/trials/richardw/ExecutionResultIteratorTrial.java

Надеюсь, это поможет.

Ура, Andreas

3 голосов
/ 05 февраля 2012
for (Map<String,Object> row : result) {
   Node x = (Node)row.get("x");
   for (String prop : x.getPropertyKeys()) {
      System.out.println(prop +": "+x.getProperty(prop));
   }
}
2 голосов
/ 28 августа 2012
Iterator<Object> columnAs = result.columnAs("n");
while(columnAs.hasNext())
{
Node n = (Node)columnAs.next();
for (String key : n.getPropertyKeys()) {
sysout("{ " + key + " : " + n.getProperty(key)+ " } ");
}

Это может помочь вам

1 голос
/ 29 марта 2018

В более новых версиях Java-драйвера можно перемещаться следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...