Я работаю над агрегацией коллекции mongodb. моя коллекция mongodb имеет creation_time в метке времени. Как я могу собрать результат в тот же день и агрегировать с результатом на следующий день. Предположим, мне нужно собирать данные в течение 5 дней. Моя коллекция mongodb:
{
"_id" : "1522845653126"
},
{
"_id" : "1522838153324"
},
{
"_id" : "1513421466415"
},
{
"_id" : "1515488183153"
},
{
"_id" : "1521571234500"
}
Как я могу рассчитать. Сколько записей сохраняется на конкретную дату? и предположим, что я хочу запросить результаты, которые возвращают промежуточный итог агрегации, например:
{
time: "2013-10-10"
count: 3,
},
{
time: "2013-10-11"
total: 7,
}
что-то вроде этого. я пытался сделать что-то подобное
db.coll.aggregate([
{
$group:{
_id:new Date($creation_time).toLocaleDateString(),
$count:{$add:1}
}
time:new Date($creation_time).toLocaleDateString()
}
])
Это не работает. Где я делаю не так? Я новичок в mongodb. Спасибо за любую помощь

Вы можете использовать агрегацию $toDate для преобразования метки времени в дату ISO и $toLong для преобразования метки времени строки в целочисленное значение в mongodb 3.6
db.collection.aggregate([
{ "$project": {
"_id": {
"$toDate": {
"$toLong": "$_id"
}
}
}},
{ "$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}}
])
И с предыдущими версиями
db.collection.aggregate([
{ "$project": {
"date": { "$add": [ new Date(0), "$_id" ] }
}}
])
@YongweiWu В предыдущей версии вы можете попробовать этот stackoverflow.com/questions/51889949/…
Можем ли мы изменить часовой пояс в добавлении
В моем случае , я использовал
db.collection.aggregate([
{ "$project": {
"date": { "$toDate": {
$multiply:["$_id",1000 ]
}
}
}}
])
преобразовать метку времени из миллисекунд в секунды.
Полезно знать, но он поддерживает только MongoDB 4.0+…