OSQL 中的 OrientDB 日期操作以在同一天但不同年份查找具有节点的路径

OrientDB date manipulation in OSQL to find a path with nodes on the same day but different years

我有一个结构如下的图表:

A --> B

A 有一个日期字段。

这仍然基于与 中相同的问题,但不同之处在于我不关心尝试在一个 OSQL 调用中完成所有操作以创建边。在这种情况下,我只是试图生成一个看起来像这样的路径:

A1(日期=2014-01-01)---> B <--- A2(日期=2013-01-01)

并且 return 一个 table 仅包含 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

这有效,但它只是 returning 匹配基本上 A1 和 A2 是完全相同的日期(包括 A1 和 A2 是相同节点的地方)。

我知道我可以使用 format() 提取部分日期字段...例如,如果我只想要一个包含年份的字符串,我可以使用 $currentMatch.Date.format('yyyy')得到它,但我仍然没有想出如何为我的查询增加那个日期。

在我的旧问题中看到 后,我开始工作了。我正在添加我的解决方案用于存档目的。希望它可以帮助其他需要在 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() and asInteger() 感觉有点麻烦,但现在我理解了它并且可以使用它。