1

I am using Google UI Apps and ScriptDB, and I have a map object similar to this:

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

I am wondering how to use a variable in a query to retrieve the key value pair data. Or, is it even possible? For example:

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

Now, I know using a variable works for the conditional statement, db.greaterThan(userLimit). However, I haven't been able to use a varriable (i.e. "userChoice") in the way I have written it for the key value.

Note, that this is only a simplified example of the code and I am not looking for a way to restruction the map object. What I would like to know is, if it is possible to use a varriable in some way to perform the query. Thanks for your help.

2 Answers 2

1

You can use a variable as property, but it's a different syntax. Like this:

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);
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for your answer. I am totally new to scripting. I haven't your answer yet but will soon. However, to expand on your answer if I were to include an additional key value in the query, such as record_id, what would be the combined syntax?
Added an example for you. This syntax does not allow you to have everything in a single line as you as can do with "fixed" property names.
0

Yes, it's possible to use a variable to perform a query. Remember, though: The key value must be present in the object you're querying. In your example, userChoice is not a property of myMapObject, so it won't match.

Here's an example related to those in the ScriptDb Service Documentation. The findOlderThan() function accepts a parameter age which is used in a query of people objects. Those people objects have 4 properties, type, name, age, and single. Therefore, a query that expects to extract people must reference one or more of those properties. Since ScriptDb is agnostic about the objects you store in it, we use of the type property as a convention to identify object types - and we do that in every query. We could just query for age, but that could also find objects that aren't people, which we aren't interested in.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.