首页 > 解决方案 > 将结果中每个数组的长度相加

问题描述

所以我想像这样在猫鼬中获得不同的数组值

await Model.distinct('array');

我的目标是获取每个数组并将它们的长度相加,可以像这样使用 for 循环轻松完成

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

但我真的不想使用 for 循环,那么有没有办法用 O(1) 实现这样的事情?

标签: mongodbmongoose

解决方案


您可以使用聚合查询来执行操作。

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

虽然操作不会是 O(1),但会明显更快并且使用更少的内存。


推荐阅读