OrientDB使用Javascript函数创建边缘并不起作用

时间:2016-03-08 17:15:45

标签: javascript orientdb

美好的一天,

我有两个班,一个代表医院招生(称为Ricoveri),另一个代表放电(称为Dimissioni)。两者都有一个名为Nosologico的财产,代表了承认的唯一标识符。

我写了一个Javascript函数,受到Luca Garulli的一篇文章的启发,以递归方式在Nosologico属性的两个类之间创建边缘。

功能代码如下:

var g=orient.getGraph();
var b=g.command('sql','select from Ricoveri')

for(i=0; i<b.length; i++){

var id=b[i].getProperty("Nosologico").toString();

var rid=b[i].getId().toString();

var r=g.command("sql", "select from Dimissioni where Nosologico = '" + id + "'");

if(r.length>0){  
var sql2="create edge dimesso from " + rid + " to (select from Dimissioni where Nosologico = '" + id + "')";

g.command('sql',sql2);
}
}

该函数已成功创建并且无错误地执行,但它不会创建任何Edge。 有时候整个服务器都被冻结了,除了杀死它并重新启动它之外别无选择。

这个功能有什么问题吗?

感谢。 QQ

2 个答案:

答案 0 :(得分:0)

也许我错了,但你做了查询

var r=g.command("sql", "select from Ricoveri where Nosologico = '" + id + "'");

然后验证结果的长度,但很明显是&gt; 0(var id 来自var b 来自Ricoveri的第一个查询)。

所以我说,也许你想从Dimissioni查询var r

var r=g.command("sql", "select from Dimissioni where Nosologico = '" + id + "'");

答案 1 :(得分:0)

首先,我建议,如果你还没有完成,那么在两个类的 nosologico 属性上创建UNIQUE_HASH_INDEXes。

然后假设 Dimissioni 中的每个 nosologico 也出现在 Ricoveri 中,并且假设Dimissioni比Ricoveri少,则以下查询应该更有效率。

var g=orient.getGraph();
var b=g.command('sql','select from Dimissioni');
var id="";
var rid="";
var sql2="";

for(i=0; i<b.length; i++){

id=b[i].getProperty("Nosologico").toString();

rid=b[i].getId().toString();

sql2="create edge dimesso from (select from Ricoveri where Nosologico = '" + id + "') to " + rid;

g.command('sql',sql2);
g.commit();

}

请告诉我这是否有帮助。

伊万