MongoDB/Mongoose查询如何返回子文档指定字段组成的扁平化数组
Mongoose查询返回扁平化ACId数组的实现方案
两种实现方式可选,根据业务场景选择即可:
方案1:基于现有查询逻辑,JS侧处理结果
该方案代码改动最小,适合查询后不需要额外数据库操作的场景:const result = await modelProfile.findOne( { _id: profileId }, { 'payItems.ACId': 1, _id: 0 } ); // 直接遍历提取ACId即可得到目标数组 const targetArray = result ? result.payItems.map(item => item.ACId) : [];方案2:使用MongoDB聚合管道,数据库层面直接返回目标结构
该方案减少不必要字段的传输,适合需要后续数据库操作、或对数据传输效率要求高的场景,更高效的写法如下(无需拆分数组再合并):const mongoose = require('mongoose'); const result = await modelProfile.aggregate([ // 匹配指定_id的文档,注意如果profileId是字符串类型需要转为ObjectId { $match: { _id: mongoose.Types.ObjectId(profileId) } }, // 直接遍历payItems数组提取ACId,生成目标数组 { $project: { _id: 0, acIds: { $map: { input: "$payItems", in: "$$this.ACId" } } } } ]); // 提取最终数组 const targetArray = result[0]?.acIds || [];
内容的提问来源于stack exchange,提问作者Mehran Ishanian
相关产品推荐
相关产品推荐

