美好的一天,
我有两个班,一个代表医院招生(称为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
答案 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();
}
请告诉我这是否有帮助。
伊万