Получить путь после запроса neo4j Java

Я пытаюсь сделать запрос, чтобы найти все возможные пути, которые соответствуют шаблону "(Заказ) - [ORDERS] -> (Продукт) - [PART_OF] -> (Категория)" и хотел бы получить весь путь (т.е. все 3 узла и 2 отношения как их соответствующие классы).

Метод, который я использовал ниже, позволил мне получить только 1 столбец данных (количество заказов: 2155). Если бы я попробовал это еще раз (2-й цикл for), число строк, которое я получил бы, равно 0(количество продуктов: 0). Есть ли способ сохранить все результаты в виде узлов и отношений, или мне нужно запросить команду 5 раз? Пожалуйста помоги!

String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return o,p,cate";
    try( Transaction tx = db.beginTx();
         Result result = db.execute(query) ){
        Iterator<Node> o_column = result.columnAs( "o" );
        int i = 0;
        for ( Node node : Iterators.asIterable( o_column ) )
        {
            i++;
        }
        System.out.println("number of orders: " + i);
        i = 0;
        Iterator<Node> p_column = result.columnAs( "p" );
        for ( Node node : Iterators.asIterable( p_column ) )
        {
            i++;
        }
        System.out.println("number of products: " + i);

        tx.success();
    }

2 ответа

Я нашел способ обойти это в коде ниже, где я бы изменил возвращаемое значение на идентификатор узла, используя id() затем использует GraphDatabaseService.getNodeByID(long):

String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return id(o), id(p), id(cate)";

int nodeID = Integer.parseInt(column.getValue().toString()); Node node = db.getNodeById(nodeID);

Если вы делаете это:

MATCH path=(o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return path

Вы можете обработать путь в вашем цикле и распаковать его. Требуется немного изучения, но вся информация там.

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

С уважением, Том

Другие вопросы по тегам