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

