如何从MongoDB集合的数组对象字段中获取唯一user_id值
获取MongoDB数组对象字段中的不重复user_id值
针对你sessions集合里嵌套在members数组对象中的user_id字段,有两种常用方法可以提取所有不重复值:
方法一:使用distinct()函数
MongoDB的distinct()支持直接指定嵌套字段路径,写法简洁高效:
db.sessions.distinct("members.user_id")
执行后直接返回预期的不重复user_id数组:
["11", "23", "73", "59", "37", "28"]
如果需要添加筛选条件(比如只统计特定时间范围内的session数据),只需在第二个参数传入查询条件:
db.sessions.distinct("members.user_id", { "members.joined_at": { $gte: ISODate("2023-06-15T00:00:00Z") } })
方法二:使用聚合框架(适合复杂场景)
如果需要更灵活的逻辑处理(比如多条件过滤、中间数据加工),可以用聚合管道实现:
db.sessions.aggregate([ // 展开members数组,将每个数组元素转为独立文档 { $unwind: "$members" }, // 按user_id分组完成去重 { $group: { _id: "$members.user_id" } }, // 格式化输出结构,去掉默认的_id字段 { $project: { _id: 0, user_id: "$_id" } }, // 可选:将结果整理为单个数组(若需要直接得到数组而非文档列表) { $group: { _id: null, uniqueUserIds: { $push: "$user_id" } } }, { $project: { _id: 0, uniqueUserIds: 1 } } ])
执行后返回包含目标数组的文档:
{ "uniqueUserIds": ["11", "23", "73", "59", "37", "28"] }
若不需要最终的数组包装,去掉最后两步$group和$project即可得到每个user_id的独立文档。
内容的提问来源于stack exchange,提问作者haste
相关产品推荐
相关产品推荐

