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

MongoDB中$nin操作符的正确用法:过滤read_by数组不含指定用户ID的记录

正确实现方案

写法1(推荐,逻辑清晰适配多条件匹配场景)

假设当前用户ID为60b968dc5150a20015d6fcae,查询语句如下:

db.yourCollectionName.find({
  type: "admin",
  read_by: {
    $not: {
      $elemMatch: {
        readerId: "60b968dc5150a20015d6fcae"
      }
    }
  }
})

写法2(更简洁的点语法写法)

db.yourCollectionName.find({
  type: "admin",
  "read_by.readerId": { $ne: "60b968dc5150a20015d6fcae" }
})

原写法出错原因

你之前用$nin没有得到正确结果,是因为$nin是直接匹配数组元素本身的值,而你的read_by数组存储的是对象,不是纯字符串ID,所以永远无法匹配到目标用户ID,自然返回0条结果。
上面两种写法的逻辑都是要求read_by数组中不存在任何一个元素的readerId字段等于当前用户ID,符合你的筛选要求,对于示例中的第二条数据,因为read_by内的空对象没有匹配的readerId,会正常返回。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:12:05