开发者

How to delete data from app engine with a filtered query

Here is my code fragment. This code works very fine with local development data store. But doesn't work on real app engine. The query filter used here only returns 181 rows.

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;
Query query = new Query("Share");
query.addFilter("timeOfDat开发者_运维知识库a", FilterOperator.GREATER_THAN, sdf.parse(date));
query.setKeysOnly();
ArrayList<Key> allKeys = new ArrayList<Key>();
if(numberOfRowsToBedeletedAtOnceString != null)
 numberOfRowsToBedeletedAtOnce = Integer.parseInt(numberOfRowsToBedeletedAtOnceString);
    for (final Entity e : dcc.prepare(query).asIterable(FetchOptions.Builder.withLimit(numberOfRowsToBedeletedAtOnce)))
    {
      allKeys.add(e.getKey());
    }

    allKeys.trimToSize();
    dcc.delete(allKeys);
    out.print("Deleted By Date count : " + allKeys.size());
    out.flush();
    out.close();


As google documents suggests you can use delete Entities By Query

Query query = pm.newQuery(Person.class); 
query.setFilter("height > maxHeightParam"); 
query.declareParameters("int maxHeightParam"); 
query.deletePersistentAll(maxHeight);

Check here


what do you mean by "doesn't work," specifically? is there an error message? what does it say? also, what's the value of numberOfRowsToBedeletedAtOnce?

if it's deadlining, or you're getting an error that says the delete is too big, try reducing numberOfRowsToBedeletedAtOnce.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜