Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何在neo4j中处理日期_Date_Neo4j_Date Range - Fatal编程技术网

Date 如何在neo4j中处理日期

Date 如何在neo4j中处理日期,date,neo4j,date-range,Date,Neo4j,Date Range,我是一位中世纪历史的历史学家,我试图在中世纪德国大约50年的时间里(从1220年到1270年)对国王、公爵、教皇等之间的网络进行编码。由于我不是图形数据库的专家,我正在寻找处理日期和日期范围的可能性 是否有可能在某个日期范围内处理到某个边缘,从而使代表关系的边缘在例如3年后消失 是否有可能询问日期标记在日期范围内的关系?在Neo4j中处理日期的常用方法是将其存储为字符串表示形式或自历元以来的毫秒(即自1970年1月1日起经过的毫秒) 第一种方法使图形更易于阅读,后者允许您进行数学运算,例如计算d

我是一位中世纪历史的历史学家,我试图在中世纪德国大约50年的时间里(从1220年到1270年)对国王、公爵、教皇等之间的网络进行编码。由于我不是图形数据库的专家,我正在寻找处理日期和日期范围的可能性

是否有可能在某个日期范围内处理到某个边缘,从而使代表关系的边缘在例如3年后消失


是否有可能询问日期标记在日期范围内的关系?

在Neo4j中处理日期的常用方法是将其存储为字符串表示形式或自历元以来的毫秒(即自1970年1月1日起经过的毫秒)

第一种方法使图形更易于阅读,后者允许您进行数学运算,例如计算delta

在您的情况下,我将在关系上存储两个名为
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
MATCH(c:Country{name:'France})-[r:HAS_-KING]->(KING)

其中r.validFrom>=-23667123600000和r.validTo您还可以将日期以数字表示形式存储为以下格式:
YYYYMMDD

在您的情况下,
12200101
将是1220年1月1日,
12701231
将是1270年12月31日

这是一种有用且可读的格式,您可以执行范围搜索,如:

MATCH (h:HistoricEvent)
WHERE h.date >= 12200101 AND h.date < 12701231
RETURN h
MATCH(h:historycevent)
其中h.date>=12200101,h.date<12701231
返回h

如果需要,它还可以让您按日期排序。

另一个使您创建的节点/属性数量保持较低的日期选项是链表年份(最早的兴趣年-最近的一年)、月份之一(1-12)和月份之一(1-31)。然后,图形中的每个“事件”都可以连接到年、月和日。这样,您就不必为一年、一个月、一天的每一个新组合创建一个新节点。你只有一组月、一天和一年。我对数字进行缩放,使其更易于操作

年份为yyyy*10000

月份是mm*100

日期是dd

因此,如果运行以下查询:

match (event)-[:happened]->(t:time) 
with event,sum(t.num) as date 
return event.name,date
order by date
您将获得一个按时间顺序排列的所有事件列表,日期如1904年1月17日,显示为19040117(yyyymmdd格式)

此外,由于这些是链表,例如, …-(t0:time{num:19040000})-[:preferences]->(t1:time{num:19050000})-。。。 排序也内置于节点中

到目前为止,这就是我喜欢进行活动约会的方式,系统处理持续时间和日期,请参阅。请参阅更多示例

与原始问题相关的示例:检索最近30天内发生的历史事件:

WITH duration({days: 30}) AS duration
MATCH (h:HistoricEvent)
WHERE date() - duration < date(h.date)
RETURN h
以持续时间({days:30})作为持续时间
匹配(h:历史事件)
其中日期()-持续时间<日期(h.date)
返回h

谢谢您的快速回答。对于我的项目来说,获得良好的可读性和计算增量的可能性是很重要的。目前我正在使用iso数据,如“1220-02-05”。neo4j是否具有将iso数据转换为毫秒数据的功能?不幸的是,这种转换功能尚不存在。因此,您需要在客户端执行此操作。@AndreasKuczera如果您将日期写为“1220-02-05”,则可以在where子句中使用字典顺序。@StefanArmburster您太棒了!我总是从你给出的几乎所有答案中得到最有用和最准确的信息,今天我只想说声谢谢。万岁!建议使用@DateLong吗?我会考虑你的建议。您的示例是可读的,可以用于增量计算。谢谢。您好,我正在尝试您的约会类型,但neo4j出现了一个错误:不知道如何比较。左:“12230500”(字符串);右图:12290225(长)--有什么想法吗?是的@AndreasKuczera,你的第一个对象也应该是长的。您应该存储long并使用long作为查询的参数,我只是以相同的方式存储所有值:
MATCH(从{id:line.id1})、(到{id:line.id2})create from-[:negative{reltype:line.rel1,datum:line.date,datenorm:line.datenorm,vorgID:line.vorgID}]>to不知道为什么neo4j将一个数字存储为长,另一个存储为字符串。我怎样才能强制存储这么长的时间呢?这个数字是用datenorm存储的。在阅读了你的文章之后,我正试图研究Neo4j中链表的概念,但是如果你看到了这一点,并且可以发布更多关于如何实现这一点的细节,我将不胜感激!当然,你想让我澄清什么?我发现这篇文章。。。我以它为基础创建了一个链接列表长达数月之久,然而,当遵循本文中的说明时,我的“下一步”关系没有标记为下一步,而是标记为关系的ID。也许这无关紧要。在我的graph DB中,我有用于新闻故事和公司的节点,其中有一个提及关系来指示哪些商店提到了一家公司。我还想知道这篇文章的写作日期。那么,我的年、月、日链接列表如何与每个故事联系在一起,这是我至今无法理解的。谢谢嗯,浏览了这篇文章,它似乎与你的愿望相切,除非你需要建立一种能够通过链接列表传播的关系。通常,链表在理论上和您的特定用例中都比较简单。首先,列表标识符节点并不是完全必要的,因为节点标签可以达到相同的效果。是的,3.4可以处理日期和空间数据。这是一个很大的进步!