Go Structに新しい属性を追加しました。データストアのエンティティの種類で永続化されました。goを使用してGoogleデータストアのスキーマを変更しますか?
私は新しい属性にフィルタを使用してエンティティをロードしようとした:新しい属性が追加された後に作成された方を対象として、これだけ働い
q := datastore.NewQuery("Person").Filter("Employed =", false)
。
属性がフィルタに追加される前に作成されたものの、フィルタで除外された属性を持つ人はいませんでした。ループと第二段階で
- まず、負荷のすべてのエンティティとフィルタ:
私はこれを処理するための二つの方法を考えています。これにより、コードが複雑になります。
- プロパティを追加してfalseに設定するすべてのエンティティを一括読み込みして再保存します。新しい属性を追加するたびにこれを行うことを忘れないでください。
これらのタイプのエンティティスキーマの変更を処理する方法はありますか?
私は、アプリケーションコードでこれを扱うのではなく、データを改造する必要があると思います。データストアのスキーマを更新する場合は、アプリに特別な機能を追加して更新する必要はありません。古いデータを修正して、アプリが取得する内容が一貫しているようにする必要があります。 – evanmcdonnal
これを行うにはどうすればよいでしょうか? – user1283776
データストアによって異なります。 SQL互換のRDBMSでは、新しい列を追加するときにデフォルト値を指定できます。 'ALTER TABLE persons追加されたCOLUMNはBOOLEAN DEFAULTをtrueにしました。 'または、振り返ってみると、SET採用者=真のIS NULLを採用した人を更新できます。もちろん、その単純な「真」は、既存の列の値に応じて任意の式にすることができます。 –