为什么脚本 Db 查询结果对象不同

Why ScriptDb query result object is different

本文关键字:对象 结果 查询 脚本 Db 为什么      更新时间:2023-09-26
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",就像在原始对象中一样。为什么现在没有定义?

一个奇怪的情况,它可能是一个错误。

使用以下代码可以得到你需要的东西:

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

使用数值而不是数字键存储和筛选结果的替代路由。

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
  }
}