MongoDB获取子文档数组时如何去除外层bills标签?
解决方法
方法一:直接提取目标数组
因为你是通过_id精确查询,查询结果只会包含单个文档,直接从返回结果中提取bills字段即可:
const queryResult = await record.find( { _id: new ObjectId(billId) }, { projection: { _id: 0, bills: 1 } } ).toArray(); const billsList = queryResult.length ? queryResult[0].bills : [];
执行后billsList就是不含外层bills标签的目标数组。
方法二:使用聚合管道
如果需要更灵活的查询逻辑,也可以用MongoDB聚合管道处理,通过$replaceRoot直接将bills数组的元素作为结果文档:
const billsList = await record.aggregate([ { $match: { _id: new ObjectId(billId) } }, { $project: { _id: 0, bills: 1 } }, { $replaceRoot: { newRoot: "$bills" } } ]).toArray();
这个管道会先匹配目标文档,投影出bills字段,再将bills数组中的每个元素作为独立结果返回,最终得到的格式与你期望的一致。
内容的提问来源于stack exchange,提问作者gautam
相关产品推荐
相关产品推荐

