为什么在使用 resultDataContents=graph 通过 REST API 返回集合时排序顺序丢失
Why is the sort order lost when returning a collection via the REST API with resultDataContents=graph
对于以下数据:
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))
当通过长度为 1 的 shell return 路径执行时,按路径中第一个节点的名称排序。
但是,通过 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 是 "row" 并且在 REST
中没有使用 COLLECT 时工作正常
在这种情况下不需要收集。
return distinct p
应该够了。
在 resultDataContents "graph" 中,它使用集合重新处理响应以唯一地收集响应的节点和关系。很可能那里的订单丢失了。
对于以下数据:
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))
当通过长度为 1 的 shell return 路径执行时,按路径中第一个节点的名称排序。
但是,通过 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 是 "row" 并且在 REST
中没有使用 COLLECT 时工作正常在这种情况下不需要收集。
return distinct p
应该够了。
在 resultDataContents "graph" 中,它使用集合重新处理响应以唯一地收集响应的节点和关系。很可能那里的订单丢失了。