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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:33:15