gpt4 book ai didi

neo4j - 按路径顺序返回节点的密码查询

转载 作者:行者123 更新时间:2023-12-02 21:20:25 24 4
gpt4 key购买 nike

我有一个 Neo4j graphdb,它存储节点的有序集合(比方说 Person 节点),每个人都有一个 Talent 节点:

(p:人)-[:HAS_TALENT]->(t:人才)

我正在组织一场才艺表演,并且有人们表演顺序的时间表:

(p:人)-[:FOLLOWS*]->(q:人)

我可以编写一个查询来返回表示人员执行顺序的路径,当我返回该路径时,Person 节点将按照它们在路径中出现的顺序显示。但是,当我执行子查询来返回人们正在表演的才能时,他们不再按路径排序显示。

有没有办法根据节点在路径中出现的顺序对节点进行排序?我尝试使用COLLECT来获取Person节点列表,但我似乎找不到使用该集合来获取有序人才列表的方法节点。

我当前的路径查询看起来像这样,有一个特殊的开始和结束节点,所以我知道谁是第一个和最后一个。 (我现在面前没有数据库,所以如果它不准确,我深表歉意):

匹配 p=(s:StartNode {side:"start"})-[:FOLLOWS*1..10]->(s:StartNode {side:"end"})
返回p

我已经尝试了很多不同的选项来检索从头到尾的路径,它们各有利弊,但我找不到以相同顺序检索人才节点的方法。


编辑:看来我可能过度简化了我的示例场景。我实际使用的数据库具有通过 Person 节点从开始到结束的多个路径,并且我有一个查询,首先选择从开始到结束的单个路径,然后再继续匹配 Talent 节点。向@Dirk Horsten 道歉,他回答了我提出的问题,但没有回答我需要回答的问题。

由于我已经在编辑此内容,@Dave Bennett 的答案解决了我的问题,因为 unwind 函数似乎为将来的 MATCH 子句保持路径顺序不变。

最佳答案

假设表演者是人物 1..5,并且他们每个人都拥有一个天赋 A..E,因此人物 1 拥有人物 A人物5 拥有天赋 E。才艺表演从第 1 人开始,到第 5 人结束。

//match all of the possible show paths where the show starts
// with the first performer
MATCH show=(:Person {name:'Person 1'})<-[:FOLLOWS*]-(:Person)

// pass on the performers and the number of performers
// as identifiers with the WITH clause
WITH nodes(show) AS performers, length(show) AS num

// order the possible shows in descending order by number of performers
ORDER BY num DESC

// limit the list to the show with the most performances
LIMIT 1

// unwind the performers collection as individual performer
UNWIND performers AS p

// match the talent that matches the performers
MATCH p-[:HAS_TALENT]->(t:Talent)

// return the name of the performer and their talent
RETURN p.name, t.name

关于neo4j - 按路径顺序返回节点的密码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28032830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com