And*_*era 14 date date-range neo4j
我是中世纪历史的历史学家,我试图在中世纪德国大约50年(1220年至1270年)的时间段内对国王,公爵,教皇等之间的网络进行编码.由于我不是图形数据库的专家,我正在寻找处理日期和日期范围的可能性.
是否有可能在日期范围内处理边缘,以便表示关系的边缘在3年后消失?
是否有可能要求在日期范围内拥有日期标记的关系?
Ste*_*ter 13
在Neo4j中处理日期的常用方法是将它们存储为字符串表示形式,或者作为自纪元以来的毫秒存储(也就是自1970年1月1日以来通过的msec).
第一种方法使图表更容易阅读,后者允许您进行数学计算,例如计算增量.
在你的情况下,我将存储两个名为validFrom和validTo关系的属性.您的查询需要确保您正在寻找正确的时间间隔.
例如,从1220年1月1日到1221年12月31日,您可以找到负责法国的国王:
MATCH (c:Country{name:'France'})-[r:HAS_KING]->(king)
WHERE r.validFrom >= -23667123600000 and r.validTo <=-23604051600000
RETURN king, r.validFrom, r.validTo
Run Code Online (Sandbox Code Playgroud)
从Neo4j 3.0开始,APOC库提供了几种将时间戳转换为人类可读日期字符串的功能.
您还可以使用以下格式将日期存储在其编号表示中: YYYYMMDD
在你的情况下12200101将是1220年1月1日,12701231将是1270年12月31日.
这是一种有用且可读的格式,您可以执行范围搜索,例如:
MATCH (h:HistoricEvent)
WHERE h.date >= 12200101 AND h.date < 12701231
RETURN h
Run Code Online (Sandbox Code Playgroud)
如果需要,它还可以让您按日期订购.
从 Neo4J 3.4 开始,系统处理持续时间和日期,请参阅官方文档。在此处查看更多示例。
与原始问题相关的示例:Retrieve the history events of the last 30 days from now :
WITH duration({days: 30}) AS duration
MATCH (h:HistoricEvent)
WHERE date() - duration < date(h.date)
RETURN h
Run Code Online (Sandbox Code Playgroud)