2012-10-19 107 views
2

我正在使用Google App Engine NDB。有時候我會想讓所有用戶在指定的列表中輸入一個電話號碼。使用查詢對此非常昂貴,所以我認爲我只是將用戶實體的id值設置爲用戶的電話號碼,以便我可以直接通過ID獲取。修改Google App Engine實體ID?

問題是電話號碼字段是可選的,所以最初創建的用戶實體沒有電話號碼,因此沒有id的值。所以它將被創建爲user = User()而不是user = User(id = phone_number)

因此,當稍後的用戶決定將電話號碼添加到他的帳戶時,是否有將該用戶實體的ID值修改爲新的電話號碼?

+0

也許我的理解不正確?獲取舊的實體標識符,將其刪除並放入新的實體標識符。 – voscausa

+0

@voscausa以及它是同一個實體。該id是實體的關鍵。在NDB中,它被稱爲id而不是key_name – Snowman

+0

NDB Docs:要檢索或創建的密鑰名稱(即字符串密鑰ID)。所以當它是一個字符串時,它是一個關鍵名稱。 – voscausa

回答

3

實體ID構成實體主鍵的一部分,因此無法對其進行更改。如果需要,更改它與使用新密鑰創建新實體以及刪除舊實體是一回事 - 這是您可以做的一件事。

更好的解決方案是創建一個PhoneNumber類型,它提供對相關User的引用,允許您使用get操作進行查找,但不要求每個用戶只有一個電話號碼。

+1

你如何參考NDB? – mFontoura