當我向數據存儲中插入消息時,我使用消息的序號創建密鑰並與發送消息的用戶建立祖先關係。當我嘗試使用僅從序列號創建的密鑰來檢索消息時,它失敗。如果我將插入更改爲使用僅基於序號的密鑰,則稍後的檢索將成功。如果我使用祖先關係創建密鑰,則Google應用引擎數據存儲失敗
代碼明智
這種失敗:
存儲:
p_key = ndb.Key(StoredBcastMsg,sendingUser)
c_key = ndb.Key(StoredBcastMsg,prof['seqNum'],parent=p_key)
prof['key']=c_key
StoredBcastMsg(**prof).put()
檢索失敗
msgToRet=ndb.Key(StoredBcastMsg,seqNum).get() #Fails even though sequence number is there in the store
這成功:
存儲:
prof['key']=c_key
StoredBcastMsg(**prof).put()
c_key = ndb.Key(StoredBcastMsg,prof['seqNum'])
檢索成功:
msgToRet=ndb.Key(StoredBcastMsg,seqNum).get() #Succeeds
這是預期的行爲?我認爲在創建密鑰時添加parent =標籤的唯一區別是創建祖先關係,以便高效地回答諸如「給我由用戶X發送的所有消息」之類的查詢。
都能跟得上你的祖先爲目的的評估是錯誤的。請參閱下面的答案。這實際上是關於實體羣體的。如果您之後的所有關係都是父/子關係,並且不需要或不需要實體組,則可以使用普通查詢。實體組的祖先也不能改變。如果您想更改實體組中的父項,您可以使用其他密鑰進行刪除和創建 –