MongoDB: как сгруппировать по дате с монго агрегирование даты с помощью драйвера Java

Я изо всех сил пытался перевести команду оболочки mongo в запрос java поверх драйвера java mongo, чтобы вызвать его в моем проекте webapp: команда выглядит следующим образом:

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}
   }
 }
)

Вывод запроса выше приводит к формату ниже в оболочке 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
 }

Я не смог написать тот же запрос в Java с помощью драйвера Java Монго. ниже мой запрос:

           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;

он возвращает набор результатов ниже:

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

У меня возникают проблемы при создании запроса, включающего в себя минутную часть и часовую часть. Как настроить мой запрос для вывода того же набора результатов, что и в монго-оболочке.

Спасибо за просмотр

Ответы на вопрос(1)

Ваш ответ на вопрос