Mongoose中如何基于user_id和指定属性过滤文档获取未读弹窗
Mongoose 弹窗数组过滤解决方案
方案1:find + 投影过滤(轻量场景首选)
仅需要过滤数组元素时推荐使用该方案,无需走完整聚合流程,性能更优。
const result = await yourUserModel.find( // 匹配指定user_id的文档 { user_id: targetUserId }, // 投影配置,过滤popupsArray仅保留未读弹窗 { user_id: 1, // 其他需要返回的字段可在此处添加 popupsArray: { $filter: { input: "$popupsArray", as: "popup", cond: { $eq: ["$$popup.isSeen", false] } } } } )
注:如需仅返回第一条匹配文档,将
find替换为findOne即可;$$popup是as参数定义的数组元素临时变量,固定以两个$开头引用。
方案2:聚合查询(适配复杂处理场景)
如果后续需要对查询结果做分组、关联查询等其他操作,可使用聚合管道实现:
const result = await yourUserModel.aggregate([ // 第一步:匹配指定user_id的文档,缩小查询范围 { $match: { user_id: targetUserId } }, // 第二步:过滤popupsArray仅保留isSeen为false的元素 { $project: { user_id: 1, // 其他需要返回的字段可在此处添加 popupsArray: { $filter: { input: "$popupsArray", as: "popup", cond: { $eq: ["$$popup.isSeen", false] } } } } } ])
内容的提问来源于stack exchange,提问作者kaushalendra pandey
相关产品推荐
相关产品推荐

