OrientDB在一年中同一天的两个节点之间创建边

OrientDB在一年中同一天的两个节点之间创建边,orientdb,Orientdb,我感兴趣的是在图中同一类的两个节点之间创建一条边u,v,如果它们共享一年中的同一天,并且v.year=u.year+1 假设我有顶点.csv: id,date A,2014-01-02 B,2015-01-02 C,2016-01-02 D,2013-06-01 E,2014-06-01 F,2016-06-01 我想看到的边缘结构是: A --> B --> C D --> E F 让我们将顶点类设置为myVertex,将边类设置为myEdge?是否可以使用SQL接口生成

我感兴趣的是在图中同一类的两个节点之间创建一条边u,v,如果它们共享一年中的同一天,并且v.year=u.year+1

假设我有顶点.csv:

id,date
A,2014-01-02
B,2015-01-02
C,2016-01-02
D,2013-06-01
E,2014-06-01
F,2016-06-01
我想看到的边缘结构是:

A --> B --> C
D --> E
F
让我们将顶点类设置为myVertex,将边类设置为myEdge?是否可以使用SQL接口生成这些边

基于此,我开始尝试以下内容:

BEGIN
LET source = SELECT FROM myVertex
LET target = SELECT from myVertex
LET edge   = CREATE EDGE myEdge
             FROM $source
             TO (SELECT FROM $target WHERE $source.date.format('MM-dd') = $target.date.format('MM-dd')
                 AND $source.date.format('yyyy').asInteger() = $target.date.format('yyyy').asInteger()-1)
COMMIT
不幸的是,这是不正确的。因此,我没有那么雄心勃勃,想看看我是否可以根据一年中的匹配日期创建边缘:

BEGIN
LET source = SELECT FROM myVertex
LET target = SELECT from myVertex
LET edge   = CREATE EDGE myEdge FROM $source TO (SELECT FROM $target WHERE $source.date.format('MM-dd') = $target.date.format('MM-dd'))
COMMIT
仍然有错误。。。我相信对于一个有经验的OrientDB用户来说,这是非常简单的

我曾考虑组合一个JavaScript函数,比如,但现在我更愿意尽可能多地使用SQL命令

非常感谢您的帮助

其他堆栈溢出引用


我尝试了OSQL批处理,但我认为您无法得到您想要的

使用whis OSQL批处理

begin
let a = select @rid, $a1 as toAdd from test let $a1 = (select from test where date.format("MM") == $parent.$current.date.format("MM") and date.format("dd") == $parent.$current.date.format("dd") and @rid<>$parent.$current.@rid and date.format("yyyy") == sum($parent.$current.date.format("yyyy").asInteger(),1))
commit
return $a
我知道了

但问题是,创建边时,不能在上一步获得的表上循环。 我认为最好的解决方案是使用JS服务器端函数。
希望能有所帮助。

我尝试使用OSQL批处理,但我认为您无法得到想要的

使用whis OSQL批处理

begin
let a = select @rid, $a1 as toAdd from test let $a1 = (select from test where date.format("MM") == $parent.$current.date.format("MM") and date.format("dd") == $parent.$current.date.format("dd") and @rid<>$parent.$current.@rid and date.format("yyyy") == sum($parent.$current.date.format("yyyy").asInteger(),1))
commit
return $a
我知道了

但问题是,创建边时,不能在上一步获得的表上循环。 我认为最好的解决方案是使用JS服务器端函数。
希望有帮助。

使用JS服务器端功能会更容易。如果您需要帮助,请告诉我。@oleksandr gubchenko我正在研究用于此的服务器端函数。。。有没有链接到一些好的文档,以及创建/使用函数的示例?我已经有几年没有做过很多Javascript编码了。。。如果我在脚本中使用V[I].getRecord.field“date”拉取一个带有日期的记录,那会返回一个日期吗?现在我可以在Studio中运行,但接下来我可能想学习如何从控制台界面在数据库中添加和使用它们。。。我在这方面还有些问题。getRecord.field'date'命令中返回的日期字段似乎不是一个,因为如果我尝试在其上执行诸如getDate之类的方法,则会出现错误。我如何才能找到我正在处理的数据类型?谢谢使用JS服务器端功能会更容易。如果您需要帮助,请告诉我。@oleksandr gubchenko我正在研究用于此的服务器端函数。。。有没有链接到一些好的文档,以及创建/使用函数的示例?我已经有几年没有做过很多Javascript编码了。。。如果我在脚本中使用V[I].getRecord.field“date”拉取一个带有日期的记录,那会返回一个日期吗?现在我可以在Studio中运行,但接下来我可能想学习如何从控制台界面在数据库中添加和使用它们。。。我在这方面还有些问题。getRecord.field'date'命令中返回的日期字段似乎不是一个,因为如果我尝试在其上执行诸如getDate之类的方法,则会出现错误。我如何才能找到我正在处理的数据类型?谢谢我可以执行服务器端功能,但可能无法在所有环境中运行服务器。我正在编写java代码,用一个查询来获得一个边对表,然后分别创建边。这个例子很有帮助,因为我以前没有尝试过求和函数和asInteger方法。我补充了一个不太雄心勃勃的问题,重点是。这在这方面帮助很大。谢谢我可以执行服务器端功能,但可能无法在所有环境中运行服务器。我正在编写java代码,用一个查询来获得一个边对表,然后分别创建边。这个例子很有帮助,因为我以前没有尝试过求和函数和asInteger方法。我补充了一个不太雄心勃勃的问题,重点是。这在这方面帮助很大。谢谢