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

如何用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-

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:45:33