我创建了一个Needham时间树(http://www.markhneedham.com/blog/2014/04/19/neo4j-cypher-creating-a-time-tree-down-to-the-day/),直到一小时。 在每个小时节点上我存储了纪元时间
CREATE (h:Hour {hour: hour, day:day, month: month, year:year, time: apoc.date.parse(year +"-"+month+"-"+day+" "+hour+":00", "s", "yyyy-MM-dd hh:mm")})
现在我想在事件节点上的开始和结束时间之间的每小时链接。
的内容create (e:Event {startHour: <some unix time>, endHour: <some later unix time>})
with e
match (h:Hour)
FOREACH (hour in range(startHour, endHour) |
merge (e)-[:IN_HOUR]->(h))
显然,由于startHour和endTime是大纪元时间而不是实际小时,因此无法工作。
我确实时间树中的小时数与[:NEXT]
关系相关联。我能以某种方式使用它吗?
答案 0 :(得分:1)
你可以这样做:
CREATE (e:Event {startHour: <some unix time>, endHour: <some later unix time>})
WITH e
MATCH (h:Hour)
USING INDEX h:Hour(time)
WHERE e.startHour <= h.time <= e.endHour
MERGE (e)-[:IN_HOUR]->(h);
USING INDEX
子句为Cypher计划者提供了一个暗示它应该使用索引(我假设你已经拥有:Hour(time)
)。
[EDITED]
即使startHour
和endHour
实际上不是一小时,这也会有用。但是,如果您希望将startHour
视为向下舍入到小时,则WHERE
子句可以使用e.startHour/3600*3600
代替e.startHour
。