2014-01-06 30 views
1

我使用谷歌UI應用程序和ScriptDb中,我有一個類似的地圖對象:Google 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」)。

請注意,這只是一個簡化的代碼示例,我沒有尋找重建地圖對象的方法。我想知道的是,如果有可能在某種方式下使用varriable來執行查詢。謝謝你的幫助。

回答

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); 
+0

謝謝您的回答。我對腳本完全陌生。我還沒有你的答案,但很快。但是,如果要在查詢中包含其他鍵值(如record_id)來擴展答案,那麼組合語法是什麼? – user2943227

+0

爲您添加了一個示例。與使用「固定」屬性名稱所做的操作相比,此語法不允許將所有內容放在一行中。 –

+0

謝謝,這是我正在尋找。 – user2943227

0

是的,可以使用變量來執行查詢。但請記住:鍵值必須存在於您查詢的對象中。在你的例子中,userChoice不是myMapObject的屬性,所以它不匹配。

下面是與ScriptDb Service Documentation中的示例相關的示例。 findOlderThan()函數接受用於查詢people對象的參數age。那些people對象有4個屬性,type,name,agesingle。因此,預計提取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 
    }); 
} 
相關問題