我正在使用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)。但是,我没有能够以我为键值编写它的方式使用varriable(即“userChoice”)。
请注意,这只是代码的简化示例,我不是在寻找重构地图对象的方法。我想知道的是,是否可以以某种方式使用varriable来执行查询。谢谢你的帮助。
答案 0 :(得分: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);
答案 1 :(得分:0)
是的,可以使用变量来执行查询。但请记住:键值必须存在于您要查询的对象中。在您的示例中,userChoice
不属于myMapObject
的属性,因此无法匹配。
以下是与ScriptDb Service Documentation中相关的示例。 findOlderThan()
函数接受参数age
,该参数用于查询people
个对象。这些people
个对象有4个属性,type
,name
,age
和single
。因此,期望提取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
});
}