У меня есть запрос, который я использую для суммирования транзакций, приходящихся на даты. Теперь я sh буду использовать $ match для фильтрации транзакций, приходящихся на набор дат.
В столбце дат поднял_дата, это отметка времени, поэтому сначала я использую $toDate
, чтобы преобразовать его в дату и отформатировать в строку даты.
Мой рабочий агрегатный запрос для вычисления итоговых сумм по датам выглядит примерно так -
db.transactions.aggregate([{
"$group": {
"_id": {
"$dateToString": {
format: "%Y-%m-%d",
date: {
"$toDate": "$raised_date"
}
}
},
amount_total: {
$sum: "$amount"
}
}
}])
Он дает мне данные:
{ "_id" : "2019-05-13", "amount_total" : 2000 }
{ "_id" : "2019-05-28", "amount_total" : 78 }
{ "_id" : "2019-09-19", "amount_total" : 3000 }
{ "_id" : "2019-01-05", "amount_total" : 9034 }
{ "_id" : "2019-04-15", "amount_total" : 2600 }
{ "_id" : "2019-11-14", "amount_total" : 2870 }
{ "_id" : "2019-09-16", "amount_total" : 1500 }
{ "_id" : "2019-09-18", "amount_total" : 7200 }
{ "_id" : "2019-04-11", "amount_total" : 106034 }
{ "_id" : "2019-03-13", "amount_total" : 2000 }
{ "_id" : "2019-04-30", "amount_total" : 2302 }
{ "_id" : "2019-01-08", "amount_total" : 4665 }
{ "_id" : "2019-05-03", "amount_total" : 83 }
{ "_id" : "2019-08-03", "amount_total" : 2500 }
{ "_id" : "2019-03-04", "amount_total" : 350930 }
{ "_id" : "2019-12-10", "amount_total" : 1819 }
{ "_id" : "2019-03-12", "amount_total" : 15002 }
{ "_id" : "2019-05-08", "amount_total" : 78 }
{ "_id" : "2019-12-12", "amount_total" : 2370 }
Тогда я Я могу фильтровать эти транзакции на основе таких дат, как эта
db.transactions.aggregate([{
"$group": {
"_id": {
"$dateToString": {
format: "%Y-%m-%d",
date: {
"$toDate": "$raised_date"
}
}
},
amount_total: {
$sum: "$amount"
}
}
},
{
$match: {
_id: {
$in: ["2019-05-13"]
}
}
}])
Что дает мне данные:
{ "_id" : "2019-05-13", "amount_total" : 2000 }
Я считаю, что лучше фильтровать данные перед агрегациями, в огромных таблицах, поэтому я sh хочу добавить запрос $ match в начале.
Теперь я пытаюсь изменить его, чтобы отфильтровать данные на основе набора дат, используя запрос на совпадение. Как отфильтровать записи, когда мне нужно изменить значения в столбцах и проверить, есть ли они в списке дат.
db.transactions.aggregate([{
"$match": {
{
"$dateToString": {
format: "%Y-%m-%d",
date: {
"$toDate": "$raised_date"
}
}
}: {
$in: ["2019-05-13"]
}
}
}, {
"$group": {
"_id": {
"$dateToString": {
format: "%Y-%m-%d",
date: {
"$toDate": "$raised_date"
}
}
},
amount_total: {
$sum: "$amount"
}
}
}])
Я пока не много работал над mongodb. Просто выясняю это.
Любая помощь приветствуется.