2016-09-14 100 views
0

我有兴趣在图形中的同一类的两个节点之间创建边(u,v),如果它们共享一年的同一天和v.year = u.year + 1。OrientDB创建两个节点之间的边缘,每年的同一天

说我有vertices.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接口生成这些边缘?

基于this question,我开始尝试这样的事:

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用户。

我想过把Michela suggested on this question这样的JavaScript函数放在一起,但我宁愿尽可能地坚持使用SQL命令。

非常感谢帮助。


其他堆栈溢出参考

+0

使用JS服务器端功能会更容易。让我知道你是否想得到一些帮助。 –

+0

@ oleksandr-gubchenko我正在研究这个服务器端函数...是否有一些良好的文档与创建/使用函数的例子链接?我已经完成了大量的Javascript编码已经有几年了......如果我用'V [i] .getRecord()。field('date')'在脚本中记录一个日期,那会不会只是返回一个[javascript日期对象](http://www.w3schools.com/jsref/jsref_obj_date.asp)? 现在我可以在Studio中运行,但是我可能想要了解如何通过某个控制台界面在数据库中添加和使用它们。 – TxAG98

+0

有关Javascript API的官方文档:http:// orientdb。com/docs/last/Javascript-Driver.html –

回答

2

我OSQL一批尝试,但我认为你不能得到你想要的东西。

enter code here

随着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<>[email protected] and date.format("yyyy") == sum($parent.$current.date.format("yyyy").asInteger(),1)) 
commit 
return $a 

我得到这个 enter image description here

但问题是,当你创建的边缘,你可以在前面获得的表不循环步。 我认为最好的解决方案是使用JS服务器端功能。 希望它有帮助。

+0

我可以做一个服务器端功能,但我可能无法在所有环境中运行服务器。我正在研究Java代码,通过查询来获得边缘对的表格,然后我将分别进行创建边缘。这个例子虽然帮助了很多,但是我之前没有用sum()函数和asInteger()方法进行实验。我添加了一个较少的雄心勃勃的问题集中在[日期操作在OSQL](http://stackoverflow.com/questions/39713423/orientdb-date-manipulation-in-osql-to-find-a-path-with-nodes-在最当日,但是)。这帮助了很多。谢谢! – TxAG98

相关问题