Я хотел бы спросить, как лучше всего запросить миллионную запись с агрегатом GROUP в mongoDB. теперь у меня есть проект, который хранит журнал каждый день, и есть много записей в день для хранения
this this my do c структура
{
"_id" : ObjectId("5dfca2db3e58065c787cf821"),
"product_id" : 47,
"site_id" : 404,
"b_id" : 587,
"domain" : "google.com",
"updated_at" : ISODate("2019-12-20T10:30:51Z"),
"created_at" : ISODate("2019-12-20T10:30:51Z")
}
В моем отчете я бы нравится группировать по product_id
и created_at
, чтобы увидеть, сколько товаров в день. ниже приведен мой мон go запрос
[
{
'$match': [
'created_at': [
'$gte' => new DateTime(startDate),
'$lte' => new DateTime(endDate),
],
],
},
{
$group: {
_id: {
'product_id': product_id,
'date': {
$dateToString: {
date: '$created_at',
format: '%Y-%m-%d'
}
},
'sum': {
'$sum': 1
}
}
}
]
, теперь в моих коллекциях 10 миллионов записей, и для выполнения запроса потребовалось около 30sec
.
с explain()
"stages" : [
{
"$cursor" : {
"query" : {
},
"fields" : {
"created_at" : 1,
"product_id" : 1,
"_id" : 0
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "site_db.doc_47",
"indexFilterSet" : false,
"parsedQuery" : {
},
"winningPlan" : {
"stage" : "COLLSCAN",
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
}
},
{
"$group" : {
"_id" : {
"product_id" : "$product_id",
"date" : {
"$dateToString" : {
"date" : "$created_at",
"format" : {
"$const" : "%Y-%m-%d"
}
}
},
"sum" : {
"$const" : 1
}
}
}
}
],
Я уже создаю индекс для коллекций, но он, кажется, не отличается.
Итак, мой вопрос,
- Можно ли сделать запрос быстрее или как мы можем улучшить мой запрос?
- моя структура do c хороша для хранения миллионов записей?
- любой инструмент, который лучше, чем mongodb?