2017-06-03 138 views
0

我正在構建一個Android應用程序,並且正在使用Google App Engine存儲用戶的數據。我希望用戶能夠從其他設備連接到他們的帳戶,但我不知道如何。Google App Engine - 數據存儲 - 獲取實體,而不是按鍵

用戶表(實物)有4個屬性:id, email, nickname and levelenter image description here

我已閱讀本: https://cloud.google.com/appengine/docs/standard/java/datastore/creating-entities

它是由他們的主要撰寫他們,我只能得到實體,這是一個問題我,因爲在新設備中,我只能獲取用戶的電子郵件,而不是密鑰和ID。 我需要通過他們的電子郵件獲得密鑰和ID。

這可能嗎? 如果不是,他們的任何其他解決方案?

回答

0

你只需要做一個簡單的query。你在GAE後端使用什麼語言?例如,在Python中,你會做這樣的事情:

def get_user_by_prop(prop, value): 
    this_user = User.query(getattr(User, prop) == value).get() 
    return this_user 

從鏈路判斷你的問題,我假設你使用的是Java?下面是文檔的查詢:https://cloud.google.com/appengine/docs/standard/java/datastore/retrieving-query-results

,他們使用示例:

Query q = 
    new Query("User") 
     .setFilter(new FilterPredicate("nickname", FilterOperator.EQUAL, "billybob")); 

PreparedQuery pq = datastore.prepare(q); 
Entity result = pq.asSingleEntity(); 
+0

非常感謝,正是我所需要的! –

1

什麼是存儲在id財產?它是否有一些有意義的價值或者只是用作唯一標識符的隨機唯一號碼?
看來你可以設計不同的數據庫,所以電子郵件地址將是你唯一的標識符。在這種情況下,你將有一個User表包含以下屬性:
email(您的唯一標識符)nicknamelevel
這樣,你就可以使用下面的代碼片段:無論是

Key userEmail; //Get user's email 
Entity user = datastore.get(userEmail); 

,您仍然可以訪問您的實體,而無需實體的鍵,通過使用query。這樣你就不會使用實體的鍵來獲取它的實例,而是通過使用給定的屬性值並找到具有該屬性值的匹配實體來獲得所需的實體。
該查詢會看起來像這樣:

String userEmail; //Get user's email 
Filter propertyFilter = 
    new FilterPredicate("email", FilterOperator.EQUAL, userEmail); 
Query q = new Query("User").setFilter(propertyFilter); 
PreparedQuery pq = datastore.prepare(q); 
try { 
    Entity user = pq.asSingleEntity() 
    //Same as Entity user = datastore.get(userEmail) mentioned above 

} catch (TooManyResultsException e) { 
    // If more than one result is returned from the Query. 
    // Add code for dealing the exception here 
} 
相關問題