对于以下数据:

create (a:Attendee {name:'luanne'});
create (a:Attendee {name:'adam'});
create (a:Attendee {name:'christoph'});
create (a:Attendee {name:'vince'});
create (a:Attendee {name:'michal'});

这个查询
MATCH p=(n:Attendee)-[r*0..1]-(m)
WITH p order by head(nodes(p)).name
return collect(distinct(p))

通过 shell 程序返回的长度为1的路径返回时,按路径中第一个节点的名称排序。

但是,通过REST API:
POST http://localhost:7474/db/data/transaction/commit
{"statements":[
{"statement":"MATCH p=(n:`Attendee`)-[r*0..1]-(m) WITH p order by head(nodes(p)).name return collect(distinct(p))","parameters":{},"resultDataContents":["graph"]}
]}]}

不会保持相同的顺序(看起来是按节点ID排序的)。

如何修复Cypher,使其获得与通过Shell执行时相同的结果?

PS。如果resultDataContents为“行”,并且在REST中未使用COLLECT时,效果很好

最佳答案

在这种情况下,不需要收集。
return distinct p应该足够了。

在resultDataContents“图形”中,它使用集合重新处理响应以收集唯一的响应节点和关系。订单很可能丢失。

10-06 06:24