You need to enable JavaScript to run this app. MongoDB提取findOne返回子文档_id为字符串数组的两种实现方案
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB提取findOne返回子文档_id为字符串数组的两种实现方案

非聚合实现方案

方案1:直接使用find表达式投影(推荐,无需二次处理)

仅MongoDB 4.4及以上版本支持,直接在findOne()的投影参数中使用$map表达式处理数组字段即可,查询直接返回预期结构:

db.yourCollection.findOne(
  { /* 此处填写你的查询过滤条件 */ },
  {
    _id: 1,
    title: 1,
    questions: {
      $map: {
        input: "$questions",
        as: "questionItem",
        in: "$$questionItem._id"
      }
    }
  }
)

方案2:应用层转换(兼容所有版本)

如果使用的MongoDB版本较低不支持find表达式投影,拿到查询结果后在业务代码中做一次简单的数组转换即可,以JavaScript为例:

const result = await db.yourCollection.findOne({ /* 你的查询条件 */ })
// 直接转换questions字段
result.questions = result.questions.map(item => item._id)

聚合框架优雅实现方案

无需使用$group+$push的复杂写法,直接通过$set阶段覆盖原字段即可,写法简洁执行效率更高:

db.yourCollection.aggregate([
  // 匹配目标文档,和findOne的过滤条件一致
  { $match: { /* 你的查询条件 */ } },
  // 直接覆盖questions字段,其他字段保留不变
  {
    $set: {
      questions: {
        $map: {
          input: "$questions",
          as: "questionItem",
          in: "$$questionItem._id"
        }
      }
    }
  },
  // 对应findOne仅返回单条结果
  { $limit: 1 }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:45:07