2010-09-06 49 views
8

Cuando cambia los modelos de datos en el motor de la aplicación para agregar nuevas propiedades, esas entradas sin una propiedad determinada se enumeran con el valor <missing> en el visor de datos en línea.consulta GQL para <missing>

Lo que me pregunto es ¿cómo puedo escribir una consulta para encontrar esas entradas?

Respuesta

8

No hay una forma directa de consultar entidades antiguas con el atributo faltante, pero puede diseñar el modelo de datos por adelantado para admitir esto. Agregue un atributo version a cada clase de modelo. La versión debe tener un valor predeterminado, que se incrementa cada vez que se modifique e implemente la clase del modelo. De esta forma, podrá consultar entidades por número de versión.

+0

Hmm ... ahora si hubiera pensado en esto antes. Probablemente sería una buena idea implementar ahora :) –

4

No hay forma de consultar el almacén de datos para las entidades que no tienen una propiedad determinada. Necesita iterar sobre todas las entidades y verificar cada una, posiblemente usando el mapreduce API.

0

O podría crear una secuencia de comandos para incluir nulo allí para todos los elementos actuales que no tienen esa propiedad utilizando la API de bajo nivel del almacén de datos, por lo que puede consultar en nulo.

Tuve este problema y así fue como lo resolví. El código aproximado sería:

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); 
      } 
     } 

    } 
Cuestiones relacionadas