如何在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
相关产品推荐
相关产品推荐

