求助:用MongoDB MQL拆分分类列表并提取两位置唯一值
解决MongoDB聚合获取categories数组指定位置唯一值的问题
正确聚合代码
collection.aggregate([ { "$group": { "_id": null, // 将所有文档归为同一分组 "categories1": { "$addToSet": { "$arrayElemAt": ["$categories", 0] } }, "categories2": { "$addToSet": { "$arrayElemAt": ["$categories", 1] } } } }, { "$project": { // 可选:移除_id字段,让输出更匹配期望格式 "_id": 0 } } ])
错误原因分析
你之前的代码中,$group阶段使用了_id: "$_id",这会让每个文档单独成为一个分组。每个分组仅包含单条文档的数据,$addToSet无法跨文档收集去重后的值,自然得不到全局唯一的集合结果。
代码逻辑说明
_id: null:强制将所有文档聚合到同一个分组中,确保后续操作能覆盖全集合数据。$arrayElemAt:精准提取每个文档categories数组的第0位(categories1)和第1位(categories2)元素。$addToSet:在全局分组中,自动去重并收集所有提取到的元素,形成唯一值集合。$project:可选步骤,用于移除默认生成的_id字段,让输出结构完全匹配你给出的期望格式。
执行后会输出符合需求的文档:
{ categories1 : [ 'Youth', 'Thriller', 'Newspaper' ], categories2 : [ 'Adventure', 'Newspaper', 'Essai' ] }
内容的提问来源于stack exchange,提问作者user4586452
相关产品推荐
相关产品推荐

