首页 > 解决方案 > mongoose group by unwind 多个数组重复数据删除

问题描述

以下数据是从mongodb中找到的

[
  {
    _id: 6077a359c51e44bd799e2531,
    result: [ '0', '1', '3' ],
    full_score: [],
    sum_score: [],
    half_result: [],
    sub_result: [ '0', '1', '3' ],
    game_id: '20210409163714_azybha8l',
    user_uid: '655f4d3e_d4ce_46c9_8a96_5de705b56215',
    created_time: '2021/04/15 10:22:17',
    __v: 0
  },
  {
    _id: 6077a366c51e44bd799e2532,
    result: [ '1' ],
    full_score: [],
    sum_score: [],
    half_result: [],
    sub_result: [ '1' ],
    game_id: '20210409163714_azybha8l',
    user_uid: '655f4d3e_d4ce_46c9_8a96_5de705b56215',
    created_time: '2021/04/15 10:22:30',
    __v: 0
  }
]

我期望的统计结果是。它们是对象数组中每个键的出现次数。

{
  result: { '0': 1, '1': 2, '3': 1 },
  full_score: {},
  sum_score: {},
  half_result: {},
  sub_result: { '0': 1, '1': 2, '3': 1 }
}

我用嵌套的for循环实现了上面的结果,但是因为时间复杂度太高,代码写的不够优雅,希望用mongodb的聚合查询来实现,但是遇到了一个问题:会导致一个值在要复制的结果。

const data = await ctx.model.ActionContest.aggregate()
    .match({ game_id })
    .unwind(
        'result',
        'sub_result'
    );

有谁能知道在这种情况下如何实现去重,或者给出期望值的完整api编写参考。谢谢~

标签: node.jsmongodbmongoose

解决方案


推荐阅读