node.js - 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编写参考。谢谢~
解决方案
推荐阅读
- apache-spark - “spark.python.worker.memory”和“spark.executor.pyspark.memory”有什么区别?
- reactjs - 在 Form.Control 中加载文本
- java - 嗨,我有包含列名作为键和列值作为值的 Map,我该如何通过 PreparedStatement 来做呢?
- php - preg-replace 的问题:函数替换整个字符串而不是仅替换其中的一部分
- python - 如何使用类别列和值列转换熊猫中的数据框
- php - 使用 wp_list_comments() 在 wordpress 中使用元键过滤评论
- python - 重力会影响 MPU6050 的信号吗?
- typescript - 没有调用 AssmeblyScript 函数
- swift - 无法快速检查两个不同值的两个 if 条件
- azure - Azure 管道在 Microsoft Teams 中发布 PR