我很难为一个用例提出正确的CYPHER查询:
我有USER
和HOBBY
作为节点。 Comment
是User
Hobbies
的关系User
。 Hobbies
可以Users
COMMENT
Hobbies
User
HOBBIES
COMMENTS
{/ 1}}。{/ 1}
问题:显示Comments
和User
,其中MATCH (u:user)-[r:comment]->(n:Hobby)
WHERE has(r.`comment`) and u.id = 'Test'
RETURN
DISTINCT n.id,n.name, n.description, COLLECT(r.id) as `comment`
ORDER BY
r.creationdate DESC
的最新r.creationdate
按最新的排序。
我想要执行的查询是:
{{1}}
显然,{{1}}无法用于在分组结果中进行排序。还有其他选择吗?
答案 0 :(得分:2)
尝试在汇总前强制执行订单。 <怎么样
MATCH (u:user {id:'test'})-[r:comment]->(n:Hobby)
WHERE has(r.comment)
WITH n, r
ORDER BY r.creationdate
RETURN n.id, n.name, n.description, COLLECT(r.id) as comment
(旁注:我建议&#39;惯用&#39;或者至少一致的样式用于查询,例如类型标签就像你的名字一样((:User)
)和关系类型就像你在互联网上大喊一样([:COMMENT]
)。这对于有效性或性能没有任何区别,但它很好,它有助于避免愚蠢的错误遵循任意约定。)
答案 1 :(得分:1)
你不需要在你的情况下有所区别,聚合已经不同了
r
在您要对其进行排序时不再存在。
WITH
预先对其进行排序。min(r.creationdate)
或max(r.creationdate)
代表2:
MATCH (u:user)-[r:comment]->(n:Hobby)
WHERE has(r.`comment`) and u.id = 'Test'
WITH
n, r.id as rid
ORDER BY
r.creationdate DESC
RETURN n.id,n.name, n.description, collect(rid) as comment
代表3:
MATCH (u:user)-[r:comment]->(n:Hobby)
WHERE has(r.`comment`) and u.id = 'Test'
RETURN
DISTINCT n.id,n.name, n.description, COLLECT(r.id) as `comment`, max(r.creationdate)
ORDER BY
max(r.creationdate) DESC