@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}]
PHP中文网2017-04-18 10:53:35
阿神2017-04-18 10:53:35
댓글에 정보를 추가해 주실 수 있나요? 감사합니다!
쉽게 볼 수 있도록 댓글 내용을 여기에 전달하세요.
1. count와 Aggregate의 차이점: mongoDB에서는 count와 Aggregate가 두 가지 다른 프로그램으로 구현됩니다. Aggregate 구현은 샤드 환경을 고려하므로 공식 문서에서는 샤딩에 Aggregate를 사용할 것을 권장합니다. .
2. MongoDB 셸에서 집계를 사용하고 Java MongoDB 드라이버를 사용하여 집계를 사용하면 둘 다 집계를 사용하므로 결과는 동일해야 합니다.
MongoDB 셸과 Java MongoDB 드라이버 간의 카운트 결과가 일관되지 않기 때문에 문제가 발생할 수 있다고 말씀하셨습니다.
제 생각에 이러한 불일치는 다음과 같습니다.
으아아아참고로.
MongoDB를 사랑해주세요! 재미있게 보내세요!
오늘 저녁 8시에는 MongoDB 중국어 커뮤니티 마스터님의 온라인 강의가 있습니다. 이 페이지에 항상 계신 마스터님의 적극적인 참여 부탁드립니다!
이 링크를 클릭해주세요.