Neo4j:嵌套和排序订单列表理解结果的正确语法是什么?
我的记录有媒体节点,每个节点都链接到更改媒体的用户。我正在尝试收集有关我的记录的所有信息。
简单的列表理解非常有用:
MATCH r
RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order}]}
这是我的问题:
1)如果媒体很多,如何按.Order排序m列表?
2)我还想收集有关m的信息,该信息可通过其他节点获得。所以我尝试了嵌套:
MATCH r
RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order, [(m:Media-[t:MODIFIED_BY]->(u) | u.UserID] }]}
这在第一个嵌套方括号中引发语法错误。能做到吗?
理想情况下,我想收集的不只是u.UserID,还包括t关系属性.DT。
3)什么时候/如果我可以使用,与1)相同的问题-如何按.DT对u列表进行排序?
将非常感谢任何指针!
---------更新cybersam回答后: 是!正如Cybersam所说,我需要添加新的属性名称。谢谢!
MATCH (r)
RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order, UserID: [(m)-[:MODIFIED_BY]->(u) | u.UserID] }]}
MATCH (r)
RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order, UserID: [(m)-[t:MODIFIED_BY]->(u) | u {.UserID, DT: t.DT}] }]}
我需要研究一下订单调用,但是我不相信ORDER BY r.Order在最后会起作用。我只返回一个r节点。在该r数组中,我想对子项进行排序(因此Media按.Order排序,User按t.DT排序)。
答案 0 :(得分:0)
这对您有用吗?
MATCH (r)
RETURN r {
.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) |
m {.URL, .Type, .Order, UserID: [(m)-[:MODIFIED_BY]->(u) | u.UserID] }]}
ORDER BY r.Order;
在地图投影中,每个属性都需要一个名称,因此我使用UserID
作为内部模式理解结果的名称。
[已更新]
以下查询可以解决您的更新问题。地图投影和模式理解的语法不支持对包含列表的排序。
MATCH (r)-[:HAS_MEDIA]->(m:Media)
WITH r, m ORDER BY m.Order
MATCH (m)-[t:MODIFIED_BY]->(u)
WITH r, m, u{.UserID, DT: t.DT} ORDER BY u.DT
WITH r, m{.URL, .Type, .Order, User: COLLECT(u)}
RETURN r {.*, Media: COLLECT(m)}