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

OrientDB creating edges with Javascript function doesn't work

美好的一天,

我有两个 类,一个代表住院(称为 Ricoveri),另一个代表出院(称为 Dimissioni)。两者都有一个名为 Nosologico 的 属性,代表入院的唯一标识符。

受 Luca Garulli 的一篇帖子的启发,我编写了一个 Javascript 函数,用于在 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);
}
}

函数创建成功并执行无误,但它没有创建任何边。 有时整个服务器都被冻结,我别无选择,只能杀死它并重新启动它。

功能有问题吗?

谢谢。 QQ

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

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

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

所以我是说,也许在 var r 中您想从 Dimissioni 查询?

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

首先我建议,如果你还没有完成,在 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();

}

如果有帮助请告诉我。

伊万