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

OrientDB function error when accessing query result

我在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"template".(#12)

我使用递归来避免在从数据库中获取数据之前使用空值。使用 for 循环会产生类似的错误。

F__Subjects 和 F__Entity_Master 之间没有关系,因为每个 F__Subjects 记录都会生成一个相关的 class,命名为 F__Subjects 记录的 subjectCode 字段并继承自 F__Entity_Master。因此,检测关系的唯一方法是使用 subjectCode 字段从他 F__Subjects class.

获取 class 元信息

有什么想法吗?

已解决 我使用了 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);
  }


 }

entities 是一个 ODocument 数组,所以对于 get/set 一个字段你应该分别使用 field(name)field(name,value) 方法。

尝试field.getProperty()

在 javascript 中为 orientdb 服务器编写函数时,这对我有用