MongoDB查询不存在的shopNumber时触发$and/$or/$nor非空数组错误排查
问题分析与解决
首先,这个错误提示$and/$or/$nor must be a nonempty array看似和你用的$in操作符无关,但实际大概率是因为你传入$in的数组在运行时变成了空数组,而非你测试的["dfgdfhdfh"]。虽然你主观认为传入的是含无效值的数组,但可能代码逻辑中存在过滤、清空数组的操作,导致最终传给MongoDB的$in条件是一个空数组,触发了这个错误(MongoDB对空数组的$in查询在部分驱动版本下会被解析成无效的逻辑判断)。
解决步骤
- 提前校验数组非空:在执行查询前,先判断要查询的
shopNumber数组是否为空,如果是空数组,直接返回空结果,不要调用find方法:const shopNumbers = ["dfgdfhdfh"]; // 替换成你的实际数组变量 let result = []; if (shopNumbers.length > 0) { result = Shops.find( { shopNumber: { $in: shopNumbers } }, { fields: { title: 1, shopNumber: 1 } } ).fetch(); } - 排查数组构建逻辑:检查你的代码中构建
shopNumber数组的部分,是否存在错误过滤掉所有元素的情况(比如错误的字符串校验、空值处理),确保数组至少包含一个元素再传入查询。 - 升级驱动版本:你当前使用的是
npm-mongo@4.3.1,这个版本可能存在相关解析bug,尝试升级到更高版本(比如5.x或以上),可以避免这类异常解析问题。
内容的提问来源于stack exchange,提问作者StormTrooper
相关产品推荐
相关产品推荐

