我在OrientDB studio中有以下功能,保存的功能没有问题:
var entities= db.query("select Name from F__Entity_Master");
getTemplate(0);
function getTemplate(index){
if (index >= entities.length){
return entities;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[index]['@class']+"'";
var template = db.query(sql);
entities[index]['template']= template;
index += 1;
getTemplate(index);
}
}
在studio中运行该函数会产生以下错误:
Erroronparsingscriptatposition#0:ErroronexecutionofthescriptScript:GetEntities ------ ^ sun.org.mozilla.javascript.internal.EvaluatorException:Javaclass“com.orientechnologies.orient.core.record.impl.ODocument”hasnopublicinstancefieldormethodnamed“template”。 (#12)inatlinenumber12Javaclass “com.orientechnologies.orient.core.record.impl.ODocument” hasnopublicinstancefieldormethodnamed “模板”。(#12)
我使用递归来避免在从数据库中获取数据之前使用空值。使用for循环会产生类似的错误。
F__Subjects和F__Entity_Master之间没有任何关系,因为每个F__Subjects记录都会生成一个以F__Subjects记录的subjectCode字段命名的相关类,并从F__Entity_Master继承。因此,检测关系的唯一方法是使用subjectCode字段从F__Subjects类中获取类元信息。
有什么想法吗?
解决 我使用了Lvca提示,经过几次试验后,这是该功能的正确版本:
var entities= db.query("select from F__Entity_Master");
getTemplate(0);
return entities
function getTemplate(i){
if (i >= entities.length){
return ;
} else {
var sql = "select from F__Subjects where subjectCode='"+ entities[i].getClassName()+"'";
var template = db.query(sql);
entities[i].field('template', template[0].toMap());
i += 1;
getTemplate(i);
}
}
答案 0 :(得分:1)
实体是一个ODocument数组,因此要获取/设置一个字段,您应该分别使用field(name)
和field(name,value)
方法。
答案 1 :(得分:0)
尝试field.getProperty()
这对我来说非常适合在javascript中为orientdb服务器编写函数