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

如何让Mongoose查询匹配指定数组项及空数组的文档?

解决方案

你可以通过MongoDB的$or操作符来同时满足两种查询条件:匹配指定数组项,或者字段为空数组(若需要也可包含未设置该属性的文档)。

修改后的代码示例

// 处理category条件:匹配指定分类,或为空数组,或无该属性
searchCriteria.filter1 = {
  $or: [
    { $in: array.category },
    { $eq: [] },
    { $exists: false } // 若不需要包含无category属性的文档,可删除此条
  ]
};

// 处理carbrand条件:匹配指定品牌,或为空数组,或无该属性
searchCriteria.filter2 = {
  $or: [
    { $in: array.carbrand },
    { $eq: [] },
    { $exists: false } // 若不需要包含无carbrand属性的文档,可删除此条
  ]
};

// 后续查询逻辑不变
const fetchedData = await Activity.find(searchCriteria)
  .sort({ date: -1 })
  .limit(limit)
  .skip(startIndex)
  .exec();

细节说明

  • $or:用于组合多个查询条件,只要满足其中任意一个条件的文档都会被返回
  • $eq: []:精准匹配空数组类型的字段值
  • $exists: false:匹配完全没有该属性的文档,如果你的业务场景不需要这类文档,直接去掉这一项即可
  • 原有的$in逻辑保持不变,依然负责匹配数组中包含指定项的文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:10:35