为什么ScriptDb查询结果对象不同

时间:2013-10-30 21:42:10

标签: javascript database google-apps-script

function myFunction() {
  var item = {};
  item = {id:'myId', rules: {1:'rule1', 2:'rule2'}};
  Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
  Logger.log(item.rules[1]);  // rule1

  var db = ScriptDb.getMyDb();
  db.save(item);

  var result = db.query({id:'myId'});
  item = result.next();
  Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
  Logger.log(item.rules[1]);  // undefined, why?

}

期望最后一个日志返回值“rule1”,就像在原始对象中一样。 为什么它现在未定义?

2 个答案:

答案 0 :(得分:1)

奇怪的是,这可能是一个错误。

使用以下代码可以获得所需内容:

...
item = JSON.parse(item.toJson());
Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
Logger.log(item.rules[1]);  // rule1
...

答案 1 :(得分:0)

使用数值而不是数字键存储和过滤结果的替代路径。

function myFunction() {
  var db = ScriptDb.getMyDb();
  var item1 = {id:'myId', rule:{num:1, details:'rule1'}};
  var item2 = {id:'myId', rule:{num:2, details:'rule2'}};

  var saveResults = db.saveBatch([item1, item2], false);

  var results = db.query({id:'myId'});

  while (results.hasNext()) {
    var item = results.next();
    if (item.rule.num == 1) 
      Logger.log(item.rule.details);  // rule1
  }
}