访问查询结果时OrientDB函数错误

时间:2015-04-02 22:03:40

标签: javascript orientdb

我在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);
  }


 }

2 个答案:

答案 0 :(得分:1)

实体是一个ODocument数组,因此要获取/设置一个字段,您应该分别使用field(name)field(name,value)方法。

答案 1 :(得分:0)

尝试field.getProperty()

这对我来说非常适合在javascript中为orientdb服务器编写函数