как выполнить статистику для каждых n элементов в MongoDB

#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"
        }
      }
    }
  }
])