Я не уверен, что это правильный вопрос или нет. Я начал работать над агрегацией mongodb. Я должен сделать график для данных на ежедневной, еженедельной, ежемесячной основе.
Я использую « $ dayOfMonth », « $ week », « $ month » для группировки в зависимости от указанной даты. Например, если разница между датами и датами меньше или равна 6, я группирую ежедневно, используя « $ dayOfMonth »,
Если разница между датами и датами превышает 6, а группировка « $ week » составляет менее 30, а если разность превышает 30, то группировка выполняется ежемесячно » $ month ».
Я передаю дату в моем " $ match ". Можно ли нажимать 0 в качестве клавиш, если gouping нет.
пример - from_date = "01/01/2018" to_date = "30/6/2018"
так группировка будет делаться на месяц. и предположим, что у меня нет даты 3, 4 и 5 месяца. Я хочу нажать 0 во вложенных клавишах в качестве значения.
output = [
{"_id": "01/01/2018", "counter":12},
{"_id": "01/02/2018", "counter": 15},
{"_id":"01/06/2018", counter: 10}
]
expected_output =
[
{"_id": "01/01/2018", "counter":12},
{"_id": "01/02/2018", "counter": 15},
{"_id":"01/03/2018", counter: 0},
{"_id":"01/04/2018", counter:0},
{"_id":"01/05/2018", counter: 0},
{"_id":"01/06/2018", counter: 10}
]
Я использую Rails и Mongoid Gem.
Запрос, который я использую
converted = Analytics::Conversion::PharmacyPrescription.collection.aggregate([
{ "$match" => {
"organisation_id" => org_id.to_s,
"date" => {
"$gte" => from_date,
"$lte" => to_date
},
"role_ids" => {"$in" => [role_id, "$role_ids"]}
}
},{
"$project" => {
"total_count" => 1,
"converted_count" => 1,
"not_converted_count" => 1,
"total_invoice_amount" => 1,
"user_id" => 1,
"facility_id" => 1,
"organisation_id" => 1,
"date" => 1,
}
},{
"$group" => {
"_id" => { "#{groupby}" => "$date" },
"total_count" => {"$sum" => "$total_count"},
"converted_count" => { "$sum" => "$converted_count" },
"not_converted_count" => { "$sum" => "$not_converted_count"},
}
}
]).to_a