#mongodb #aggregate
Вопрос:
Как выполнить базовую статистику для каждых n элементов в Mongodb. Например, если у меня всего 100 записей, как показано ниже
Имя | Рассчитывать | Образец |
---|---|---|
a | 10 | x |
a | 20 | y |
a | 10 | z |
b | 10 | x |
b | 10 | y |
b | 5 | z |
как мне выполнить среднее, медианное, std dev для каждых 10 записей, чтобы я получил 10 результатов. Поэтому я хочу рассчитать среднее/медиану/std dev для A для каждых 10 выборок до всех элементов базы данных. Аналогично для b, c и так далее
извините, если это наивный вопрос
Ответ №1:
вам нужно иметь какой-то счетчик, чтобы отслеживать количество…. например, я добавил здесь номер строки, затем применил ведро из 3 (здесь n=3), а затем вернул сумму и среднее значение группы(3). этот пример можно изменить, чтобы выполнить некоторую сортировку и группировку, прежде чем мы создадим корзину, чтобы получить желаемый результат.
Пожалуйста, обратитесь к https://mongoplayground.net/p/CL7vQGUWD_S
db.collection.aggregate([
{
$set: {
"rownum": {
"$function": {
"body": "function() {try {row_number = 1;} catch (e) {row_number= 0;}return row_number;}",
"args": [],
"lang": "js"
}
}
}
},
{
$bucket: {
groupBy: "$rownum",
// Field to group by
boundaries: [
1,
4,
7,
11,
14,
17,
21,
25
],
// Boundaries for the buckets
default: "Other",
// Bucket id for documents which do not fall into a bucket
output: {
// Output for each bucket
"countSUM": {
$sum: "$count"
},
"averagePrice": {
$avg: "$count"
}
}
}
}
])