1

我正在使用 Google UI Apps 和 ScriptDB,并且我有一个类似于此的地图对象:

myMapObject = {record_id: projectA,
               apple : 316,
               orange : 956,
               banana : 536}

我想知道如何在查询中使用变量来检索键值对数据。或者,它甚至可能吗?例如:

var userChoice = e.parameter.choice;
var userLimit = e.parameter.limit;
var result = db.query({userChoice : db.greaterThan(userLimit)})

现在,我知道使用变量适用于条件语句 db.greaterThan(userLimit)。但是,我无法以我为键值编写变量的方式使用变量(即“userChoice”)。

请注意,这只是代码的简化示例,我不是在寻找重构地图对象的方法。我想知道的是,是否可以以某种方式使用变量来执行查询。谢谢你的帮助。

4

2 回答 2

1

您可以将变量用作属性,但它是一种不同的语法。像这样:

var query = {};
query[userChoice] = db.greaterThan(userLimit);
//edit as requested in the comment
query.record_id = 'projectA'; //or query['record_id'] = ...
var result = db.query(query);
于 2014-01-06T17:03:39.887 回答
0

是的,可以使用变量来执行查询。但请记住:键值必须存在于您要查询的对象中。在您的示例中,userChoice不是 的属性myMapObject,因此它不会匹配。

这是与ScriptDb 服务文档中的示例相关的示例。该findOlderThan()函数接受在对象age查询中使用的参数people。这些people对象有 4 个属性,typenameagesingle。因此,期望提取的查询people必须引用这些属性中的一个或多个。由于 ScriptDb 不知道您存储在其中的对象,因此我们使用该type属性作为识别对象类型的约定 - 我们在每个查询中都这样做。我们可以只查询age,但也可以找到people我们不感兴趣的非 对象。

function findOlderThan( age ) {
  var db = ScriptDb.getMyDb();
  var people = [];  // array to hold results

  // Find people with an age greater than given value.
  var results = db.query({
    type: 'person',
    age: db.greaterThan(age)
  });
  while (results.hasNext()) {
    var item = results.next();
    people.push(item);
  }
  return people;
}

function test_findOlderThan() {
  deleteAll(); // from developers.google.com/apps-script/guides/script-db/patterns#delete_all_items_in_the_database
  loadDb();
  Logger.log(JSON.stringify(findOlderThan(20))); // 3 results
  Logger.log(JSON.stringify(findOlderThan(25))); // 2 results
  Logger.log(JSON.stringify(findOlderThan(50))); // 1 result
  Logger.log(JSON.stringify(findOlderThan(100))); // no result
}

function loadDb() {
  var db = ScriptDb.getMyDb();
  var item = db.save({
    type: 'person',
    name: 'fred',
    town: 'Shelbyville',
    age: 25,
    single: true
  });
  item = db.save({
    type: 'person',
    name: 'joe',
    town: 'Springfield',
    age: 45,
    single: false
  });
  item = db.save({
    type: 'person',
    name: 'sam',
    town: 'Springfield',
    age: 90,
    single: true
  });
}
于 2014-01-06T17:05:00.627 回答