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

Mongoose从数组随机获取对象时如何去除返回结果的_id字段

该需求可以实现,只需在你现有聚合管道的末尾追加字段过滤阶段即可,以下是两种常用实现方案:

  • 方案1:仅保留Users字段、排除_id,返回带属性名的结果
    MongoDB聚合默认会自动返回_id字段,必须手动设置_id: 0才会隐藏该字段,你可以在$sample阶段后新增$project阶段,显式指定返回规则:

    let user = await Schema.aggregate([
      {
        $unwind: "$Users"
      },
      {
        $sample: {
          size: 1
        }
      },
      {
        $project: {
          _id: 0, // 排除默认返回的_id字段
          Users: 1 // 保留Users字段
        }
      }
    ])
    

    执行后返回结构如下,直接通过user[0].Users即可拿到用户ID:

    [
      {
        "Users": "805249193890676736"
      }
    ]
    
  • 方案2:直接返回用户ID字符串,无外层对象包裹
    如果不想每次取值都额外取.Users属性,可以在字段过滤后追加$replaceRoot阶段,直接把Users的值提升为聚合结果的顶层值:

    let user = await Schema.aggregate([
      {
        $unwind: "$Users"
      },
      {
        $sample: {
          size: 1
        }
      },
      {
        $project: {
          _id: 0
        }
      },
      {
        $replaceRoot: {
          newRoot: "$Users"
        }
      }
    ])
    

    执行后返回结构如下,直接通过user[0]即可拿到用户ID:

    [
      "805249193890676736"
    ]
    

注意:aggregate()方法返回的是Promise对象,原代码如果没有加await或者.then()处理,拿到的会是聚合查询游标对象,不是实际查询结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:45:32