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
相关产品推荐
相关产品推荐

