@Test
public void testCount() throws Exception {
DynamicSqlParameter dsp = new DynamicSqlParameter();
long sT = System.currentTimeMillis();
MongoDatasource mongoDatasource = MongoDatasource.getInstance(mongoService.getDatasource());
DBCollection dbCollection = mongoDatasource.getDB().getCollection("dayFlow");
List arrayList = new ArrayList<>();
DBObject dbObject1 = new BasicDBObject();
dbObject1.put("usedDayFlow", 2);
DBObject dbObject2 = new BasicDBObject();
dbObject2.put("_id", null);
dbObject2.put("count", new BasicDBObject("$sum", 1));
arrayList.add(new BasicDBObject("$match", dbObject1));
arrayList.add(new BasicDBObject("$group", dbObject2));
System.out.println(JSON.serialize(arrayList));
AggregationOutput size = dbCollection.aggregate(arrayList);
System.out.println(size.results());
System.out.println("运行时间:" + ((System.currentTimeMillis() - sT) /1000) + "s");
}
[ { "$match" : { "usedDayFlow" : 2}} , { "$group" : { "_id" : null , "count" : { "$sum" : 1}}}]
[{ "_id" : null , "count" : 1002223}]
This problem has been solved. The latest driver mongo-java-driver-3.4.0 is used. Through the following method, the number of records can be accurately counted in the sharded cluster mode. Thank you for your help!
mongo shell >> db.collection.aggregate([{$match:{categories:"Bakery"},{$group:{"_id":null,"count":{$sum:1}}}} ])
Can you add some information in the comments? Thank you!
Forward the content of the comment here for easy viewing:
1. The difference between count and aggregate: In mongoDB, count and aggregate are implemented in two different programs. The implementation of aggregate takes into account the shard environment, so the official document recommends using aggregate for the shard environment. count.
2. The results should be the same when using aggregate under the MongoDB shell and using the Java MongoDB driver to count, because both use aggregate.
You mentioned that the Issue is probably due to the inconsistent count results between the MongoDB shell and the Java MongoDB driver.
This inconsistency, I think it may be:
For reference.
Love MongoDB! Have Fun!
Tonight at 8 o'clock, there will be an online lecture by the master of the MongoDB Chinese community. Please participate actively; this master is always on this page!
Please click this link.