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

如何在MongoDB中查询排除多个指定ID的数据?

嘿,我来帮你搞定这个MongoDB查询问题!

问题根源分析

你遇到的查询结果不正确,主要是两个核心问题导致的:

  • 变量引用错误:你在查询条件里把$ids用引号括成了'$ids',这会让MongoDB把它当成一个普通字符串字面量,而不是去读取你定义的那个$ids数组变量。
  • 数据类型不匹配:MongoDB里的_id字段默认存储的是ObjectId类型,但你的$ids数组里是字符串格式的ID,直接做对比根本匹配不上。

而你用name字段查询时结果正常,是因为name本身就是字符串类型,和你传入的'asghar'类型一致,而且你这里直接传的是字符串值(不是变量),所以没有触发上面的问题。

解决步骤

1. 先把字符串ID转换成ObjectId类型

这是关键一步,要把数组里的字符串ID转成MongoDB能识别的ObjectId:

  • 如果是在Mongo Shell中操作:
    var ids = [ObjectId("5adcbe766803fa6b048b4599"), ObjectId("5adcbe766803fa6b048b4567")];
    
  • 如果是在PHP中(从你的语法判断更偏向PHP场景):
    $ids = [
        new MongoDB\BSON\ObjectId("5adcbe766803fa6b048b4599"),
        new MongoDB\BSON\ObjectId("5adcbe766803fa6b048b4567")
    ];
    

2. 正确引用变量执行查询

去掉$ids外面的引号,直接使用变量本身:

  • Mongo Shell版本:
    db.users.find({ '_id': { '$nin': ids } })
    
  • PHP版本:
    db.users.find(array('_id' => array('$nin' => $ids)));
    

这样调整后,就能得到你想要的排除指定ID的查询结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:31