Mongoose 查询:过滤每个文档的嵌套motos数组仅保留已启用型号
实现方案
先提取所有已启用的摩托型号为一维数组,再通过Mongoose聚合的$filter操作符过滤每个用户的motos数组,仅保留匹配的型号。
步骤1:提取允许的型号列表
const allowedModels = motosEnabled.map(item => item.model); // 输出:['A1', 'A2']
步骤2:执行聚合查询
User.aggregate([ { $project: { // 不需要返回_id可添加下行配置:_id: 0, name: 1, motos: { $filter: { input: "$motos", // 指向原文档的motos数组 as: "moto", // 数组遍历单个元素的别名 cond: { $in: [ "$$moto.model", allowedModels ] } // 过滤条件:型号在允许列表中 } } } } ])
输出结果和你预期的完全一致:
[ { name: 'Kartik', motos: [{ model: 'A1' }] }, { name: 'Niharika', motos: [{ model: 'A1' }, { model: 'A2' }] } ]
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

