У меня есть база данных mongodb, которая собирает данные об устройстве.
Пример документа
{
"_id" : ObjectId("5c125a185dea1b0252c5352"),
"time" : ISODate("2018-12-13T15:09:42.536Z"),
"mac" : "10:06:21:3e:0a:ff",
}
Цель состоит в том, чтобы подсчитывать уникальные значения mac в день, от первого документа в БД до последнего документа в БД.
Я поиграл и пришел к выводу, что мне нужно иметь несколько групп, а также проекты во время агрегации.
Это то, что я пытался - не уверен, в правильном ли направлении или нет, или просто полностью запутался.
pipeline = [
{"$project": {
"_id": 1,
"mac": 1,
"day": {
"$dayOfMonth":"$time"
},
"month": {
"$month":"$time"
},
"year": {
"$year":"$time"
}
}
},
{
"$project": {
"_id": 1,
"mac": 1,
"time": {
"$concat": [{
"$substr":["$year", 0, 4]
},
"-", {
"$substr": ["$month", 0, 2]
},
"-",
{
"$substr":["$day", 0, 2]
}]
}
}
},
{
"$group": {
"_id": {
"time": "$time",
"mac": "$mac"
}
},
"$group": {
"_id": "$_id.time",
"count":{"$sum": 1},
}
}
]
data = list(collection.aggregate(pipeline, allowDiskUse=True))
Вывод теперь не похож на агрегацию,
[{"_id": null, "count": 751050}]
Я использую Pymongo в качестве драйвера и использую Mongodb 4.
В идеале он должен просто показывать дату и количество (например, {"_id": "2018-12-13", "count": 2}.
Я хотел бы получить отзывы и советы.
Заранее спасибо.