@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}]
Ce problème a été résolu. Le dernier pilote mongo-java-driver-3.4.0 est utilisé. La méthode suivante peut être utilisée pour compter avec précision le nombre d'enregistrements en mode cluster fragmenté.
mongo shell >> db.collection.aggregate([{$match:{categories:"Bakery"},{$group:{"_id":null,"count":{$sum:1}} }}])
Pouvez-vous ajouter quelques informations dans les commentaires ? Merci!
Transférez le contenu du commentaire ici pour une visualisation facile :
1. La différence entre count et Aggregate : Dans mongoDB, Count et Aggregate sont implémentés dans deux programmes différents. L'implémentation de Aggregate prend en compte l'environnement de partitionnement, le document officiel recommande donc d'utiliser Aggregate pour le partitionnement dans l'environnement. .
2. En utilisant l'agrégat sous le shell MongoDB et en utilisant le pilote Java MongoDB pour utiliser l'agrégat pour compter, les résultats devraient être les mêmes, car les deux utilisent l'agrégat.
Vous avez mentionné que le problème est probablement dû au fait que les résultats du décompte entre le shell MongoDB et le pilote Java MongoDB sont incohérents.
Je pense que cette incohérence peut être :
Pour référence.
J'adore MongoDB ! Amusez-vous!
Ce soir à 20 heures, il y aura une conférence en ligne du maître de la communauté chinoise MongoDB. Merci de participer activement ; ce maître est toujours sur cette page !
Veuillez cliquer sur ce lien.