Pouton Gerald
Pouton Gerald

Reputation: 1625

datastore count query fetchOptions

I want to do the following:

PreparedQuery pq = datastore.prepare(q);
int count = pq.countEntities(FetchOptions.ALL);

But there is no ALL option. So how do I do it?

For context, say I want to count all entry in my table where color is orange.

If I can't do this directly using DatastoreService, can I use Datanucleus's JPA? As in do they support SELECT COUNT(*) ... for the appengine datastore?

Upvotes: 2

Views: 2938

Answers (4)

Theophilus Omoregbee
Theophilus Omoregbee

Reputation: 2503

This Old but should help for new developers seeking for a way out.

The best way to go about this is using Sharding Counter Techniques, as you save on the entity you know would scale with time, use sharding counter to get the total number of record as it is inserted or the entity group is updated by new record, with this you can get the total number of counter and their corresponding counts which will sum up to give the actual count of the total element in the datastore table or kind.

Use this link for help on how to go about it, for better understanding watch the google i/o 2008 on scaling web applications here, after that you move to this documentation on appengine here, so you get the grasp of it quickly, and also there is a github example test too.

For added example use this link Blog Tutorial which explained a simple example.

Upvotes: 1

varun
varun

Reputation: 4650

The marked answer is not correct, it will max out in 1000

This is how one will get correct count

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
 Query query = new Query("__Stat_Kind__");
 Query.Filter eqf = new Query.FilterPredicate("kind_name",
                            Query.FilterOperator.EQUAL,
                            "MY_ENTITY_KIND");
query.setFilter(eqf);
Entity entityStat = ds.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");

Upvotes: 2

Divyesh Rupawala
Divyesh Rupawala

Reputation: 1221

You can count total no of record using following code.

com.google.appengine.api.datastore.Query qry = new com.google.appengine.api.datastore.Query("EntityName");
com.google.appengine.api.datastore.DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
int totalCount = datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults());

i hope it will help you.

Upvotes: 5

DataNucleus
DataNucleus

Reputation: 15577

You can use Google's plugin for DataNucleus, which seems to show support for count()

Upvotes: 1

Related Questions