如果同一组节点

时间:2015-06-04 15:02:45

标签: neo4j cypher py2neo

路径代表用户'浏览历史。

我正在考虑应该采用哪种设计结构。

例如,

红色路径表示用户已浏览

[页面A] - > [页面B] - > [页面B] - > [页面C] - > [第B页] - > [第A页]

蓝色路径表示用户已浏览

[第C页] - > [第D页] - > [第A页]

如果我想在第A页之前选择浏览路径第C页

答案应为蓝色路径

我如何在密码查询

中设计查询

哪种设计适合我的情况?

谢谢。

设计1(每个路径共享相同的节点)

设计2(每个路径应该有自己的节点。)

更新

我尝试在我的模型中应用您的查询

我想知道节点5231 是否早于节点7222

但它无法获得任何输出。

MATCH p=(x)-[*0..]->(y {code: '5231'})
WHERE NOT ()-->(x)
RETURN p
ORDER BY LENGTH(p)
LIMIT 1;

数据

model data download

1 个答案:

答案 0 :(得分:0)

为每个路径创建不相交的子图是浪费的,并且可能不会使解决您的用例变得更容易。

这是一个查询(使用统一图表),查找最早出现C的路径(或其中一个,如果有平局)。

MATCH p=(x)-[*0..]->(y {id: 'C'})
WHERE NOT ()-->(x)
RETURN p
ORDER BY LENGTH(p)
LIMIT 1;

此特定查询结束它在C节点上找到的路径,并且不打算包含任何后续节点(可能有许多分支,并且不清楚您想要遵循哪个分支)。