如何用Mongoose/MongoDB将查询返回对象转为数组(非JS方式)
解决方案
你可以通过MongoDB的聚合管道实现直接返回订阅者数组的需求,无需JavaScript后续处理,具体代码如下:
const mongoose = require('mongoose'); // 使用聚合管道查询 const allOfHisSubscribers = await myModel.aggregate([ // 匹配目标用户文档(需将字符串ID转为ObjectId) { $match: { _id: mongoose.Types.ObjectId(req.params.id) } }, // 展开subscribers数组,每个元素转为独立文档 { $unwind: "$subscribers" }, // 仅保留订阅者的name字段,去除多余_id { $project: { _id: 0, name: "$subscribers.name" } } ]);
原理说明
$match:精准定位目标用户文档,确保只处理指定ID的数据。$unwind:将数组字段subscribers拆分为多个独立文档,每个文档对应一个订阅者对象。$project:重构输出结构,只保留订阅者的name字段,同时移除默认的_id字段,最终输出格式完全符合需求。
简化版(无需额外字段过滤)
如果subscribers数组元素本身只有name字段,可省略$project步骤,直接返回展开后的订阅者对象:
const allOfHisSubscribers = await myModel.aggregate([ { $match: { _id: mongoose.Types.ObjectId(req.params.id) } }, { $unwind: "$subscribers" }, { $replaceRoot: { newRoot: "$subscribers" } } ]);
内容的提问来源于stack exchange,提问作者Islam Y-
相关产品推荐
相关产品推荐

