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

MongoDB统计readBy数组不含指定userId的未读Offer数量方法

统计指定用户的未读Offer数量

要统计用户5add82620d7f5b38240c63d4的未读Offer数量,核心就是找出该用户ID不在readBy数组中的Offer文档(包括那些还没有被任何用户读过、压根没有readBy字段的Offer)。这里给你两种实用的实现方式:

方法一:用countDocuments快速统计

这是最直接的方式,一行代码就能得到结果:

db.offers.countDocuments({
  readBy: { $nin: [ObjectId("5add82620d7f5b38240c63d4")] }
})

为什么这么写?

  • $nin操作符会自动匹配两种符合条件的文档:
    1. 没有readBy字段的Offer(完全未被阅读)
    2. readBy数组里不包含目标用户ID的Offer(其他用户读过,但该用户没读)
  • 一定要把字符串ID转换成ObjectId,因为集合里存储的readBy元素是ObjectId类型,直接用字符串匹配会出错。

方法二:用聚合管道(适合扩展统计)

如果之后你需要同时做其他统计(比如按过期时间分组统计未读数量),用聚合管道会更灵活:

db.offers.aggregate([
  // 第一步:筛选出该用户未读的Offer
  {
    $match: {
      readBy: { $nin: [ObjectId("5add82620d7f5b38240c63d4")] }
    }
  },
  // 第二步:统计数量并返回结果
  {
    $count: "unreadOffersCount"
  }
])

执行后会返回类似{ "unreadOffersCount": 3 }的结果,清晰直观。

内容的提问来源于stack exchange,提问作者Ashish Choudhary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:50:34