メッセージをデータストアに挿入すると、メッセージのシーケンス番号を使用してキーが作成され、メッセージを送信したユーザーとの祖先関係が作成されます。シーケンス番号だけから作成されたキーを使用してメッセージを取得しようとすると、失敗します。シーケンス番号のみに基づくキーを使用するように挿入を変更すると、後の取得は成功します。
コード単位
これは失敗します:
保管所:
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から送信されたすべてのメッセージをくれ」などのクエリに効率的に答えることができる祖先関係を作成することだと思いました。