我试图决定一个好的数据模型来表示任务和子任务。这是一个两部分问题:
首先,我希望能够获得一系列任务(task1) - [:NEXT] - >(task2) - [:NEXT] - >(task3)等。我希望能够从第一个开始收集它们并按顺序显示它们。密码很简单......就像
p = match(first:Task)-[:NEXT*]->(others:Task)
return o.name, o.instructions
order by length(p) // or something like this, probably with a union to get both the first task and other tasks in the same output
但是,我也想让一个子任务有孩子。例如,我可能会有一系列任务构成"如何制作咖啡"但是当我创建一组任务构成"如何制作早餐" ,我想指出"如何制作咖啡"任务集并重复使用它们。
让cypher返回交错列表(例如1,1.1,1.1.1,2等)会很好,但我实际上只对1,2,3等同样感到高兴。 .n。
我一直在寻找并且没有在任何地方找到明确的解决方案。这是我想象的图片。任何方向,想法或参考都非常感谢。
答案 0 :(得分:0)
我将重新使用answer来解决另一个问题,但它确实是解决此问题的最佳方法。您遇到的问题是,一旦您有多个不同但相交的路径,您的方案就会开始崩溃。因此,您最终会尝试破坏数据以尝试解决生成的冲突。
1)对于每个链,创建一个节点来表示该链。
2)创建从该节点到链中每个节点的关系,并在关系上添加索引属性。
3)改为在“链”节点上运行Cyphers。
为您的案例展开上述内容......
在这种情况下,链节点表示必须按顺序完成的任务列表;它本身也可以成为一项任务。将列表与任务分开是更多工作,但它允许您定义多种方法来完成某项任务。例如,我可以通过启动我的咖啡机来制作咖啡,要求Google制作它(它将启动机器),或者去星巴克。这应该足够灵活,以支持您需要表示的任何内容,而不会在每个实例上践踏。这里的关键部分是关系也可以拥有属性!不要害怕用它来区分它们。 (你可以在每个任务链中添加一个'group-id'来区分它们,但这会产生扩展问题)