密码可变长度模式

时间:2018-07-30 12:15:47

标签: neo4j cypher graphql

我已经像这样对时间轴建模:

(t: Timeline) - [:PREV] -> (t1: Timeline) - [:PREV] -> (t2: Timeline)

每个Timeline节点都有一个名为timestamp的属性。

我的时间事件来自RabbitMQ,未指定顺序(因为所有服务都使用异步推送到队列),所以当新的时间事件到来时,我需要在正确的位置插入新的时间节点以维护我的时间轴订单。

要将新的Timeline节点插入时间轴,请使用以下查询遍历该列表:(headTimestamp是最新的时间节点)

MATCH (t: Timeline {timestamp: headTimestamp}) - [:PREV*] -> (t1: Timeline)
WHERE t1.timestamp < newTimestamp
RETURN t1

我找不到在第一场比赛中休息的方法。当前,它返回所有带有timestamp < newTimestamp

的节点

我该怎么做,或者该问题可以解决吗?

1 个答案:

答案 0 :(得分:1)

您也许可以使用LIMIT 1获得第一场比赛:

MATCH (t: Timeline {timestamp: headTimestamp}) - [:PREV*] -> (t1: Timeline)
WHERE t1.timestamp < newTimestamp
WITH t1 LIMIT 1
RETURN t1

您可能需要进行测试以确保您获得了第一个匹配结果,因为除非使用ORDER BY,否则通常不会定义结果的顺序,就像这样:

MATCH path = (t: Timeline {timestamp: headTimestamp}) - [:PREV*] -> (t1: Timeline)
WHERE t1.timestamp < newTimestamp
WITH t1 
ORDER BY length(path) ASC
LIMIT 1
RETURN t1