私は、mongo db 内に膨大なコレクションがあるプロジェクトに取り組んでいます。ここで、mongo db からいくつかの詳細を取得する必要があります。これは、SQL の group by 句によく似ています。mongo shell でクエリを正常に実行しました:
    > db.votes.aggregate(
    ... { $group : {
    ... _id : "vote_post_id",
    ... votesPerId : { $sum : 1 }
    ... }}
    ... );
    {
"result" : [
            {
                    "_id" : "vote_post_id",
                    "votesPerId" : 27371750
            }
    ],
    "ok" : 1
    }
    >
Javaプログラムからクエリを実行しているときに、次のエラーに直面しています:
    Exception in thread "main" com.mongodb.CommandResult$CommandFailure: command 
    failed [aggregate]: { "serverUsed" : "localhost/127.0.0.1:27017" , 
    "errmsg" : "exception: aggregation result exceeds maximum document size (16MB)"
     , "code" : 16389 , "ok" : 0.0}
    at com.mongodb.CommandResult.getException(CommandResult.java:88)
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
    at com.mongodb.DBCollection.aggregate(DBCollection.java:1311)
    at main.Connetion.CheckConnection.GetNoOfVotesForAType(CheckConnection.java:210)
    at main.DAO.Votes.VoteDAO.findKeyWord(VoteDAO.java:109)
    at main.DAO.Votes.VoteDAO.main(VoteDAO.java:139)
Java プログラムをデバッグしましたが、mongo shell で書いた正確なクエリを生成しています。
    { "$group" : { "_id" : "$vote_post_id" , "count" : { "$sum" : 1}}}
私はこの問題に対して多くの回答をしてきましたが、どれも問題を解決していないようです。
集計関数を作成するための私の Java コード:
// パイプライン操作を作成します。最初に $match DBObject match = new BasicDBObject("$match", new BasicDBObject("vote_type_id", "1") );
    // build the $projection operation
    DBObject fields = new BasicDBObject("vote_post_id", 1);
    fields.put("_id", 0);
    DBObject project = new BasicDBObject("$project", fields );
    // Now the $group operation
    DBObject groupFields = new BasicDBObject( "_id", "$vote_post_id");
    groupFields.put("count", new BasicDBObject( "$sum", 1));
    DBObject group = new BasicDBObject("$group", groupFields);
    // run aggregation
    AggregationOutput output = votesCollection.aggregate( match, project, group );
    System.out.println(output.getCommandResult());