Rumah > Soal Jawab > teks badan
@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
public long getCount() {
String user = "用户名";
String database = "admin";
String password = "密码";
MongoCredential credential = MongoCredential.createCredential(user,database, password.toCharArray());
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(10)
.threadsAllowedToBlockForConnectionMultiplier(10)
.socketTimeout(20000)
.connectTimeout(15000)
.maxWaitTime(50000)
.build();
MongoClient mongoClient = new MongoClient(new ServerAddress("IP地址", "端口"), Arrays.asList(credential), options);
MongoDatabase mongoDatabase = mongoClient.getDatabase("数据库");
MongoCollection<Document> collection = mongoDatabase.getCollection("数据表");
final long[] count = new long[1];
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
count[0] = (long) document.get("count");
}
};
Bson bson = Filters.eq("categories", "Bakery");
collection.aggregate(
Arrays.asList(
Aggregates.match(bson),
Aggregates.group(null, Accumulators.sum
("count", 1L))
)
).forEach(printBlock);
return count[0];
}
阿神2017-04-18 10:53:35
Bolehkah anda menambah beberapa maklumat dalam ulasan? terima kasih!
Majukan kandungan ulasan di sini untuk tontonan mudah:
1. Perbezaan antara kiraan dan agregat: Dalam mongoDB, kiraan dan agregat dilaksanakan dalam dua program berbeza Pelaksanaan agregat mengambil kira persekitaran serpihan, jadi dokumen rasmi mengesyorkan menggunakan agregat untuk pengiraan dalam persekitaran .
2. Menggunakan agregat di bawah cangkerang MongoDB dan menggunakan pemacu Java MongoDB untuk menggunakan agregat untuk mengira, hasilnya harus sama, kerana kedua-duanya menggunakan agregat.
Anda menyebut bahawa masalahnya mungkin hasil kiraan antara cangkerang MongoDB dan pemacu Java MongoDB adalah tidak konsisten.
Saya rasa ketidakkonsistenan ini mungkin:
1)比较的过程有没有纰漏;
2)所用的Java MongoDB驱动是否有纰漏。
Untuk rujukan.
Sayangi MongoDB! Selamat Berseronok!
Malam ini pada pukul 8, akan ada kuliah dalam talian oleh tuan komuniti Cina MongoDB Sila ambil bahagian secara aktif;
Sila klik pautan ini.