Mongoose如何从查询结果的嵌套数组中筛选符合条件的单个对象
实现方案
方案1:数据库层面过滤(推荐)
不需要修改find的查询条件,使用MongoDB聚合框架的$filter操作符在返回阶段过滤每个文档的translations数组,不影响全量集合的文档返回数量,仅裁剪数组内容,性能更优。
代码示例:
await model.aggregate([ // 无$match阶段,和find({})等价,返回全量集合文档 { $project: { translations: { $filter: { input: "$translations", as: "item", cond: { $eq: ["$$item.name", "EN"] } } } } } ]).then((data: any) => { return res.status(200).json({ data }); });
方案2:应用层代码过滤
如果不能调整查询逻辑,直接在拿到返回结果后遍历处理即可:
代码示例:
await model .find({}) .select("translations") .then((data: any) => { const processedData = data.map(doc => { return { ...doc._doc, translations: doc.translations.filter(translation => translation.name === 'EN') }; }); return res.status(200).json({ data: processedData }); });
内容的提问来源于stack exchange,提问作者Sehrish Waheed
相关产品推荐
相关产品推荐

