【发布时间】:2015-01-19 20:16:21
【问题描述】:
我有一个 neo4j graphdb 存储节点的有序集合(比如说 Person 节点),每个人都有一个 Talent 节点:
(p:Person)-[:HAS_TALENT]->(t:Talent)
我正在组织一场才艺表演,并且有人们表演顺序的时间表:
(p:Person)-[:FOLLOWS*]->(q:Person)
我可以编写一个查询来返回一个路径,该路径表示人们执行的顺序,当我返回该路径时,Person 节点会按照它们在路径中出现的顺序显示。但是,当我执行子查询以返回人们正在执行的才能时,它们不再按路径排序。
有没有办法根据节点在路径中出现的顺序对节点进行排序?我尝试使用COLLECT 来获取 Person 节点列表,但我似乎无法找到一种方法来使用该集合来获取 Talent 节点的有序列表。
我当前的路径查询看起来像这样,有一个特殊的开始和结束节点,所以我知道谁是第一个和最后一个。 (我现在没有数据库在我面前,如果它不是正确的,请道歉):
MATCH p=(s:StartNode {side:"start"})-[:FOLLOWS*1..10]->(s:StartNode {side:"end"})
RETURN p
我已经通过了很多不同的选项来检索从头到尾的路径,它们各有利弊,但我找不到以相同顺序检索人才节点的方法。
编辑:看来我可能过度简化了我的示例场景。我实际使用的数据库有多个从开始到结束通过 Person 节点的路径,并且我有一个查询,首先选择从开始到结束的单个路径,然后再继续匹配 Talent 节点。向@Dirk Horsten 道歉,他回答了我提出的问题,但没有回答我需要回答的问题。
由于我已经在编辑此内容,@Dave Bennett 的回答解决了我的问题,因为 unwind 函数似乎为未来的 MATCH 子句保持路径顺序不变。
【问题讨论】:
-
请包含您正在使用的查询
-
@FrobberOfBits 我已经对其进行了编辑以添加查询。我什至不一定附加到那个特定的查询(我已经尝试了几个,它们似乎都在不同程度上起作用),我只是无法想出一个查询来以路径顺序返回 Talent 节点.