如何使用筛选查询从app引擎中删除数据

时间:2010-06-22 20:18:36

标签: java google-app-engine google-cloud-datastore

这是我的代码片段。此代码适用于本地开发数据存储。但不适用于真正的应用引擎。此处使用的查询过滤器仅返回181行。

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("timeOfData", 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();

2 个答案:

答案 0 :(得分:1)

正如Google文档建议您可以使用按查询删除实体

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

检查here

答案 1 :(得分:1)

具体来说,“不起作用”是什么意思?有错误信息吗?它说什么?另外,numberOfRowsToBedeletedAtOnce的价值是什么?

如果它是截止日期,或者您收到的错误表明删除太大,请尝试减少numberOfRowsToBedeletedAtOnce