我的图表结构如下:
A - >乙
A有一个日期字段。
这仍然基于与my other question中相同的问题,但这不同之处在于我并不关心尝试在一个OSQL调用中执行所有操作来创建边缘。在这种情况下,我只是尝试生成一个看起来像这样的路径:
A1(日期= 2014-01-01)---> B< --- A2(日期= 2013-01-01)
并返回一个仅包含A1和A2 id的表。
我开始编写一个看似如下的MATCH查询:
MATCH {CLASS: A, AS: A1} -edgeTypeA->
{AS: B} <-edgeTypeA-
{AS: A2, WHERE: {$matched.A1.Date=$currentMatch.Date}
RETURN A1, B, A2
这有效,但它只返回匹配,其中A1和A2基本上是完全相同的日期(包括A1和A2是同一节点的地方)。
我知道我可以使用format()来提取日期字段的一部分......例如,如果我只想要一个包含年份的字符串,我可以使用$ currentMatch.Date.format('yyyy')来获取它为了我的查询,我仍然没有想出如何增加该日期。
答案 0 :(得分:1)
在我的旧问题中看到what Alessandro did后我开始工作了。我正在为归档目的添加我的解决方案。希望它可以帮助其他需要在OSQL查询中进行日期操作的人。
这是我最终的结果:
MATCH {CLASS: A, AS: A1} -edgeTypeA->
{AS: B} <-edgeTypeA-
{AS: A2, WHERE: ($matched.A1.Date.format('yyyy').asInteger()=sum($currentMatch.Date.format('yyyy').asInteger(),-1) AND
$matched.A1.Date.format('MM-dd')=$currentMatch.Date.format('MM-dd') ) }
RETURN A1,A2
我的数据是正确的:
+----+------+------+
|# |A1 |A2 |
+----+------+------+
|0 |#49:30|#49:32|
|1 |#55:44|#56:46|
|2 |#53:0 |#53:2 |
|3 |#55:20|#55:22|
|4 |#49:42|#49:44|
|5 |#50:32|#50:34|
+----+------+------+
打电话给sum()和asInteger()感觉很多,但现在我理解它并可以使用它。