App Engineでデータモデルを変更して新しいプロパティを追加すると、特定のプロパティのないエントリが<missing>
オンラインデータビューアの値とともに一覧表示されます。
私が疑問に思っているのは、これらのエントリを見つけるためのクエリをどのように書くことができるかということです。
App Engineでデータモデルを変更して新しいプロパティを追加すると、特定のプロパティのないエントリが<missing>
オンラインデータビューアの値とともに一覧表示されます。
私が疑問に思っているのは、これらのエントリを見つけるためのクエリをどのように書くことができるかということです。
属性が欠落している古いエンティティを直接クエリする方法はありませんが、これをサポートするようにデータモデルを事前に設計できます。version
各モデルクラスに属性を追加します。バージョンにはデフォルト値が必要です。デフォルト値は、モデルクラスが変更およびデプロイされるたびに増加します。このようにして、バージョン番号でエンティティを照会できるようになります。
特定のプロパティを持たないエンティティをデータストアに照会する方法はありません。すべてのエンティティを反復処理し、それぞれをチェックする必要があります-おそらくmapreduceAPIを使用して。
または、低レベルのデータストアAPIを使用して、そのプロパティを持たない現在のすべてのアイテムに対してnullを固定するスクリプトを作成して、nullでクエリを実行することもできます。
私はこの問題を抱えていました、そしてそれは私がそれを解決した方法です。大まかなコードは次のようになります。
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("JDOObjectType");
List<Entity> results = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(9999));
for (Entity lObject : results) {
Object lProperty = lObject.getProperty("YOUR_PROPERTY");
if (lProperty == null) {
lObject.setProperty("YOUR_PROPERTY", null);
datastore.put(lProperty);
}
}
}