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

Mongoose Find()查询问题:空技能数组时忽略对应条件仅查分类

解决Mongoose查询中空数组条件的问题

核心思路是动态构建查询条件——仅在arrayOfSkill包含有效值时,才将技能匹配条件加入查询逻辑,空数组时直接忽略该条件,避免返回空结果。

基础实现方案

var arrayOfCategories = [ '63073212ed3e0f85ccffc8cf' , '63073324ed3e0f85ccffc8ff']
var arrayOfSkill = []

// 初始化查询条件,先添加必选的分类匹配规则
const query = {
  'category.astolCat_id': { $in: arrayOfCategories }
};

// 只有技能数组非空时,追加技能匹配条件
if (arrayOfSkill.length > 0) {
  query['skills.astolSkill_id'] = { $in: arrayOfSkill };
}

// 执行查询
const astro = await Astrologer.find(query);

简化写法(利用扩展运算符)

如果想让代码更紧凑,可以用扩展运算符实现条件式的对象扩展:

const astro = await Astrologer.find({
  'category.astolCat_id': { $in: arrayOfCategories },
  // 数组非空时扩展出技能条件,否则扩展空对象(等同于忽略)
  ...(arrayOfSkill.length > 0 ? { 'skills.astolSkill_id': { $in: arrayOfSkill } } : {})
});

原理说明

当arrayOfSkill为空数组时,$in: []会匹配没有对应字段或者字段值为空的文档,这显然不是预期结果。通过动态构建查询对象,空数组时不加入该条件,就能保证仅按分类规则查询,返回符合分类要求的所有文档。

内容的提问来源于stack exchange,提问作者unknown Gabbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:03:26