Я хотел запросить базу данных, чтобы найти количество сообщений в секунду, чтобы ввести их в график, чтобы показать тенденцию активности. Я использую spring-data-mongo, но пока первый шаг — сделать это в оболочке mongo, прежде чем беспокоиться о том, как это сделать из 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
}
]
Спасибо, что прочитали это.