MongoDB查询结果转换:转对象数组并去重category_id
MongoDB查询去重并重构结果格式
我写了一条MongoDB查询语句:
db.collection.find({ "product_id": 1212 })
用来获取指定product_id的所有数据,当前返回结果如下:
[ { "product_id": 1212, "name": "sprit", "category_id": 1234, "category": "drink" }, { "product_id": 1212, "name": "sprit", "category_id": 2122, "category": "soda" }, { "product_id": 1212, "name": "sprit", "category_id": 2121, "category": "mocktail" }, { "product_id": 1212, "name": "sprit", "category_id": 2121, "category": "mocktail" } ]
这个结果里存在重复的category_id,我希望通过MongoDB查询将结果转换成以下指定的对象数组格式,同时去除重复的category_id:
[ { "product_id": 1212, "name": "sprit", "categories": [ { "category_id": 1234, "category": "drink" }, { "category_id": 2122, "category": "soda" }, { "category_id": 2121, "category": "mocktail" } ] } ]
解决方案
使用MongoDB的聚合管道可以实现这个需求,具体查询语句如下:
db.collection.aggregate([ // 筛选指定product_id的数据 { $match: { "product_id": 1212 } }, // 按product_id和name分组,收集去重的category信息 { $group: { _id: { product_id: "$product_id", name: "$name" }, categories: { $addToSet: { category_id: "$category_id", category: "$category" } } } }, // 重构输出格式,去掉_id,保留需要的字段 { $project: { _id: 0, product_id: "$_id.product_id", name: "$_id.name", categories: 1 } } ])
步骤解释
- $match阶段:先把
product_id为1212的文档筛选出来,减少后续要处理的数据量。 - $group阶段:按照
product_id和name做分组,用$addToSet把每个不重复的分类信息(category_id和category组合)放进categories数组,自动完成去重。 - $project阶段:调整输出的文档结构,把分组用的
_id拆成product_id和name字段,保留categories数组,同时去掉默认生成的_id字段。
内容的提问来源于stack exchange,提问作者Unknown Developer
相关产品推荐
相关产品推荐

