You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:57:01