Neo4j-ogm 查询路径

Neo4j-ogm query path

在我的 Java 代码中,我有一个查询来匹配树中从根到叶子的最短路径。

Strinq query = "Match path = (p:Root)-[*1..100]-(m:Leaf) "
    + "WITH p,m,path ORDER BY length(path) LIMIT 1 RETURN path";

但是,当我尝试如下查询时

SessionFactory sessionFactory = new SessionFactory("incyan.Data.Neo4j.Models");
Session session = sessionFactory.openSession("http://localhost:7474");
Object o = session(query, new HashMap<String,Object>());

o 包含 ArrayListLinkedHashMap 而不是映射对象。

我什至不能确定路径元素的标签和关系的开始和结束节点。

我做错了什么?

我不确定 Java 位,但如果您使用 shortestPath 函数(关键字?),您的查询应该更有效:

MATCH path=shortestPath((p:Root)-[*1..100]-(m:Leaf))
RETURN path

此外,我不知道您的数据模型是什么样的,但我希望您的树(我假设它是一棵树)节点上的标签都相同。你可以使用 Cypher 判断一个节点是根还是叶:

MATCH path=shortestPath((root:Element)-[*1..100]-(leaf:Element))
WHERE NOT((root)-[:HAS_PARENT]->()) AND NOT(()-[:HAS_PARENT]->(leaf))
RETURN path

当前的 neo4j-ogm 版本没有将查询结果映射到域实体。返回路径只会为您提供该路径中节点和关系的属性(按顺序,因此您可以推断出关系 start/end)。 ID 未被 OGM 当前用于此特定操作的 Neo4j REST api return 编辑,这就是它们丢失的原因。您可能需要提取 ID 并 return 它们作为查询的一部分。

将单个查询结果列映射到实体将在 Neo4j-OGM 2.0 版本中可用。