You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询:获取按字母排序的去重爱好列表

解决MongoDB聚合去重后爱好列表的排序问题

你当前的聚合管道用$addToSet虽然能实现去重,但$addToSet是无序的,无法直接生成排序后的数组。可以通过两种方式达成需求:

方法一:兼容旧版本MongoDB(无版本限制)

通过两次分组+排序的逻辑实现:

db.users.aggregate([
  // 拆分hobbies数组,每个爱好生成独立文档
  { $unwind: "$hobbies" },
  // 按爱好分组,自动完成去重
  { $group: { _id: "$hobbies" } },
  // 按爱好名称升序排序(1代表升序,-1代表降序)
  { $sort: { _id: 1 } },
  // 将排序后的爱好收集到result数组中
  { $group: { _id: null, result: { $push: "$_id" } } }
])

方法二:MongoDB 5.0+ 简洁写法

利用$sortArray操作符直接对去重后的数组排序:

db.users.aggregate([
  { $unwind: "$hobbies" },
  { $group: { _id: null, result: { $addToSet: "$hobbies" } } },
  // 对result数组按元素升序排序
  { $project: { result: { $sortArray: { input: "$result", sortBy: 1 } } } }
])

两种方法最终都会输出符合要求的结果:

{
  "_id": null,
  "result": ["code", "eat", "read", "sleep", "swim"]
}

内容的提问来源于stack exchange,提问作者MayAsk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:20:27