我们正在使用层次结构树结构,其中父级有零个或多个子级,而一个子级有一个或零个父级。当我们查询给定父级的直接子级列表时,查询会以随机顺序返回子级。我们需要孩子按照我们在创建或更新孩子时定义的顺序返回。
我在孩子之间添加了关系 -[:Sibling]-> 所以“顶部”兄弟只有一个传入的 :Sibling 关系,而“底部”兄弟只有一个传出关系。
鉴于此,是否有一个 Cypher 查询以兄弟顺序返回子级?
我有一个返回每个孩子及其兄弟的查询,但现在我必须编写一些代码以正确的顺序返回列表。
另一种方法可能是为每个子节点添加一个排序号。如果其中一个孩子更改顺序,则需要为所有孩子更新。这种方法似乎对图形数据库概念有点陌生。
如果以前遇到过这个问题,是否有标准的算法来以编程方式解决它?
更新1
布鲁诺要求的样本数据
(parent1)
(child1)-[:ChildOf]->(parent1)
(child2)-[:ChildOf]->(parent1) (child2)-[:Sibling]->(child1)
(child3)-[:ChildOf]->(parent1) (child3)-[:Sibling]->(child2)
是否有密码查询以该顺序返回 child1、child2、child3?
如果不是,则可以通过编程方式进行排序
使用属性而不是关系
(parent1)
(child1)-[:ChildOf]->(parent1) (child1:{order:1})
(child2)-[:ChildOf]->(parent1) (child2:{order:2})
(child3)-[:ChildOf]->(parent1) (child3:{order:3})
`match (c)-[:ChildOf]->(parent1) return c ordered by c:order`
我不希望有一个可以更新孩子顺序的密码查询。
更新2
我现在已经到达以下查询,它以正确的顺序返回子项
`match (firstChild)-[:FirstChildOf]->(parent) match (sibling)-[:Sibling*]->(firstChild) return firstChild,sibling`
此查询依赖于添加 -[:FirstChildOf]->(parent) 关系。
如果我没有听到,否则我会将其设置为答案。
我应该假设没有用于将节点插入有序列表的密码查询吗?