検索

ホームページ  >  に質問  >  本文

java - mongodb分片集群下,count和聚合统计问题

在mongodb分片集群下,直接用count统计会不准确,用聚合统计则可以

但是在java或mongodb客户端(非命令行)调用mongodb,使用聚合统计时,统计的结果和count同样不准确,请问大神们,我的代码如下,请大神指点,找不到原因!

@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}]

该统计结果比实际数据量要多一些,请教大神,对于分片集群的聚合统计要如何操作?

天蓬老师天蓬老师2807日前807

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-04-18 10:53:35

    最新のドライバー mongo-java-driver-3.4.0 を使用することで、シャードクラスターモードで正確にレコード数をカウントできるようになりました。

    mongo シェル >> db.collection.aggregate([{$match:{categories:"ベーカリー"},{$group:{"_id":null,"count":{$sum:1}}}} ])

    リーリー

    返事
    0
  • 阿神

    阿神2017-04-18 10:53:35

    コメントに情報を追加していただけますか?ありがとう!

    簡単に閲覧できるよう、コメントの内容をここに転送します:

    1. カウントと集計の違い: mongoDB では、カウントと集計は 2 つの異なるプログラムで実装されます。そのため、公式ドキュメントではシャード環境に集計を使用することを推奨しています。

    2. MongoDB シェルで集計を使用する場合と Java MongoDB ドライバーを使用してカウントを行う場合は、両方とも集計を使用するため、結果は同じになるはずです。

    この問題は、MongoDB シェルと Java MongoDB ドライバー間のカウント結果の不一致が原因である可能性があると述べました。

    この矛盾はおそらく次のようなものだと思います:

    リーリー

    ご参考までに。

    MongoDB が大好きです!楽しむ!


    今夜 8 時に、MongoDB 中国語コミュニティのマスターによるオンライン講義があります。このマスターは常にこのページにいますので、積極的に参加してください。

    このリンクをクリックしてください。

    返事
    0
  • キャンセル返事