MongoDB: cómo agrupar por fecha con agregación de fecha de mongo usando el controlador java

Me ha costado mucho escribir para convertir un comando de shell mongo en una consulta java sobre el controlador java mongo para poder llamarlo en mi proyecto de aplicación web: el comando es el siguiente:

db.post.aggregate(
{
 $match: { dateCreated:
                {
                  "$gt": new ISODate("2013-08-09T05:51:15.000Z"),
                  "$lt": new ISODate("2013-08-09T05:51:20.000Z")
                }
       }
 },
 { 
  $group: {
    _id: {
        hour: {$hour: "$dateCreated"},
        minute: {$minute: "$dateCreated"},
        second: {$second: "$dateCreated"}   
    },
    cnt: {$sum : 1}
   }
 }
)

La consulta anterior da como resultado el formato a continuación en el shell mongo:

{
"result" : [
    {
        "_id" : {
            "hour" : 5,
            "minute" : 51,
            "second" : 19
        },
        "cnt" : 26
    },
    {
        "_id" : {
            "hour" : 5,
            "minute" : 51,
            "second" : 18
        },
        "cnt" : 29
    },
    {
        "_id" : {
            "hour" : 5,
            "minute" : 51,
            "second" : 17
        },
        "cnt" : 27
    },
    {
        "_id" : {
            "hour" : 5,
            "minute" : 51,
            "second" : 16
        },
        "cnt" : 25
    },
    {
        "_id" : {
            "hour" : 5,
            "minute" : 51,
            "second" : 15
        },
        "cnt" : 16
    }
],
"ok" : 1
 }

Fallé al escribir la misma consulta en java usando el controlador java mongo. a continuación es mi consulta:

           DBObject matchStart = new BasicDBObject("$match",new BasicDBObject("dateCreated",new BasicDBObject("$gt",startTime).append("$lt",endTime)));
        DBObject field = new BasicDBObject("dateCreated",1);
        field.put("h", new BasicDBObject("$hour","$dateCreated"));
        field.put("m", new BasicDBObject("$minute","$dateCreated"));
        field.put("s", new BasicDBObject("$second","$dateCreated"));

        DBObject project = new BasicDBObject("$project",field);
        DBObject groupField = new BasicDBObject("_id","$s");


        groupField.put("count", new BasicDBObject("$sum",1));
        DBObject group = new BasicDBObject("$group",groupField);

        AggregationOutput output = mongoOperations.getCollection("post").aggregate(matchStart,project,group);

        return output;

devuelve un conjunto de resultados a continuación:

{"result" : [ 
    { "_id" : 19 , "count" : 26} , 
    { "_id" : 18 , "count" : 29} , 
    { "_id" : 17 , "count" : 27} , 
    { "_id" : 16 , "count" : 25} , 
    { "_id" : 15 , "count" : 16}
          ] , 
"ok" : 1.0}

Tengo problemas para hacer que la consulta incluya la parte de los minutos y la parte de la hora. ¿Cómo puedo modificar mi consulta para generar el mismo conjunto de resultados que en el shell mongo uno?

Gracias por mirar eso

Respuestas a la pregunta(1)

Su respuesta a la pregunta