Neo4j 模式理解列表的嵌套列表/排序器

Neo4j 模式理解列表的嵌套列表/排序器,neo4j,cypher,Neo4j,Cypher,Neo4j:嵌套和排序顺序表理解结果的正确语法是什么 我的记录有媒体节点,每个节点都链接到更改媒体的用户。我正试图收集有关我记录的所有信息 简单的列表理解非常有用: MATCH r RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order}]} 以下是我的问题: 1) 如果有许多媒体,如何按顺序对m列表进行排序 2) 我还想收集有关m的信息,这些信息可以通过其他节点获得。所以我试着筑巢: MATC

Neo4j:嵌套和排序顺序表理解结果的正确语法是什么

我的记录有媒体节点,每个节点都链接到更改媒体的用户。我正试图收集有关我记录的所有信息

简单的列表理解非常有用:

MATCH r
RETURN r {.*, Media: [(r)-[:HAS_MEDIA]->(m:Media) | m {.URL, .Type, .Order}]}
以下是我的问题:

1) 如果有许多媒体,如何按顺序对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 relationship property.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}] }]} 

我需要进一步研究订单电话,但我不相信r的订单。最后的订单会起作用。我只返回一个r节点。在该r数组中,我希望对子键进行排序(因此媒体按.Order排序,用户按t.DT排序)。

这对您有用吗

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)} 

这对你有用吗

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)} 

非常感谢。我将在我的原始问题中回答,因为此字段限制了我的回答。感谢您确认模式理解还不支持对包含列表进行排序。给定x个不同的节点标签,写出每个节点的所有顺序查询会变得非常笨拙。对于那些不需要特定排序顺序进行收集的数组,我可以在收集后对数组进行排序。谢谢你的帮助!非常感谢。我将在我的原始问题中回答,因为此字段限制了我的回答。感谢您确认模式理解还不支持对包含列表进行排序。给定x个不同的节点标签,写出每个节点的所有顺序查询会变得非常笨拙。对于那些不需要特定排序顺序进行收集的数组,我可以在收集后对数组进行排序。谢谢你的帮助!