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

