0

我想查询数据库以找到每秒的帖子数以输入图表以显示活动趋势。我使用 spring-data-mongo 但现在,第一步是在 mongo shell 中执行此操作,然后再担心如何从 java 执行此操作。

我在上面使用了聚合框架,如下所示:

 db.post.group({
key:{dateCreated: 1},
cond: { dateCreated:
        {
          "$gt": new ISODate("2013-08-09T05:51:15Z"),
          "$lt": new ISODate("2013-08-09T05:51:20Z")
        }
      },
reduce: function(cur, result){
   result.count += 1
},
 initial: {count:0}
})

结果令人鼓舞,但似乎是因为 ISODate 的小数部分,计数似乎错误,因为它每秒分组,小数使每个计数为 1。

 [
{
    "dateCreated" : ISODate("2013-08-09T05:51:15.332Z"),
    "count" : 1
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:15.378Z"),
    "count" : 1
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:15.377Z"),
    "count" : 1
},
 // many more here
 ]

有没有办法只考虑秒部分,结果如下:

 [
{
    "dateCreated" : ISODate("2013-08-09T05:51:15Z"),
    "count" : 5
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:16Z"),
    "count" : 8
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:17Z"),
    "count" : 3
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:18Z"),
    "count" : 10
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:19Z"),
    "count" : 2
},
{
    "dateCreated" : ISODate("2013-08-09T05:51:20Z"),
    "count" : 13
} 

 ]

感谢您阅读本文。

4

1 回答 1

1

对于那些处于相同情况的人。这是我修改查询的方式。感谢@Sammaye。

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}
       }
}
)
   {
"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
   }
于 2013-09-08T09:23:57.287 回答