сложить длину каждого массива внутри результата - PullRequest
0 голосов
/ 11 февраля 2020

, поэтому я пытаюсь получить различные значения массива в пн goose, как это

await Model.distinct('array');

, и моя цель состоит в том, чтобы получить каждый массив и сложить его длины, это можно легко сделать для l oop вроде так

for(const val of array){
    sum += array.length
};

но я действительно не хочу использовать для l oop, так есть ли способ реализовать такую ​​вещь с помощью O (1)?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Вы можете использовать агрегированный запрос для выполнения операции.

const sum = await Model.aggregate(
  {
    $group: {
      _id: '$array'
    }
  },
  {
    $unwind: {
       path: '$_id'
    }
  },
  {
    $project: {
      total_length: { $sum: '$_id'}
    }
  }
)

Хотя операция не будет O (1), но будет значительно быстрее, а также использует очень меньше памяти.

0 голосов
/ 12 февраля 2020

Вы можете использовать собственное решение MongoDB ($group + сумма размеров массива). Он работает x2 быстрее, чем обычный for l oop

await Model.aggregate([
  {
    $group: {
      _id: "$array"
    }
  },
  {
    $group: {
      _id: null,
      sum: {
        $sum: {
          $size: "$_id"
        }
      }
    }
  }
])

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...