2013-07-01 3 views
0

в настоящее время имеет Cypher метода запросаПолучить свойство узла с помощью Java встроенного Cypher запроса

public static void RunQuery(String _query) 
{ 
    Properties prop = new Properties(); 
    final String DB_PATH = "path/to/db" 
    GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); 
    ExecutionEngine engine = new ExecutionEngine(graphDb); 
    ExecutionResult result = engine.execute(_query); 
    for(Map<String,Object> map : result) 
    { 
     System.out.println(map.toString()); 
    } 
    graphDb.shutdown(); 


} 

Однако это только позволяет мне получить результаты, как это:

{a=Node[11303]} 
{a=Node[11341]} 
{a=Node[11343]} 
{a=Node[11347]} 
{a=Node[11349]} 
{a=Node[11378]} 

Как я могу увеличить его выплюнуть из всех результатов запроса, как это делает оболочка cypher?

ответ

2

Как выглядит ваш запрос. Возвращаемый Map<String, Object> будет иметь ключ от возвращаемой переменной. Объект может быть Path, Node или Relationship, и это просто вызовет на нем собственный toString(), который в Java-коде просто возвращает идентификатор узла. Вы должны создать свой собственный принтер, то, что получит ключи свойств и перебирает каждый из них.

for (String key : node.getPropertyKeys()) { 
    System.out.println("Key: " + key + ", Value: " + node.getProperty(key)); 
} 
+0

да, я ищу, если объект является узлом для его печати свойств и значений, и если это значение (например, счетчик) для него не t о. По сути, я хочу воссоздать консоль в веб-интерфейсе или оболочке neo4j. – Badmiral

+1

Это зависит от вас, чтобы распечатать свойства, я не верю, что Neo4j предоставляет любой удобный метод для этого, но вы можете сделать это на Java, я изменил свой ответ, включив в него код для этого. – Nicholas

+0

Спасибо Николаю! В вашем коде, что такое r и что такое отношенияDto? – Badmiral

-1

Это зависит от RETURN вашего запроса ..

Например, если у вас есть запрос, как это:

_query="Start x= node(someIndex) Match x-[rel:SOMETHING]-n Return n"; 

Таким образом, ваш код может быть

ExecutionResult result = engine.execute(_query); 
    Iterator<Node> n_column = result.columnAs("n"); 
      for (Node outputNode: IteratorUtil.asIterable(n_column)) { 
       System.out.println(outputNode.getProperty("yourKey","defaultValueIfNull")); 
      } 
+0

. Предполагается, что вы знаете, что apriori возвращает n. Я просто хочу вернуть строковые результаты запроса, чтобы реплицировать оболочку neo4j – Badmiral

Смежные вопросы