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

MERN栈中如何以对象为查询条件并使用$all运算符?

解决方案

你的问题出在对MongoDB $all 运算符的用法理解有误——$all 是用来匹配数组字段包含所有指定元素的,不能直接包裹整个查询对象。下面是正确的实现方式:

步骤1:构建正确的查询条件

需要针对theme字段单独处理,将其转换为$all匹配格式,其他字段保持精确匹配即可:

var request = {
    sdg: 'SDG 8: Decent Work & Economic Growth',
    theme: [ 'Economy', 'People' ]
};

// 构建查询条件对象
const query = {};
for (const key in request) {
    if (key === 'theme') {
        // 对theme字段使用$all,确保文档的theme数组包含所有指定元素
        query[key] = { $all: request[key] };
    } else {
        // 其他字段(sdg、assignment_type)直接精确匹配
        query[key] = request[key];
    }
}

步骤2:执行查询

把处理后的query传入find方法即可,当request为空时,query也会是空对象,此时会返回所有文档:

const test = await Project.find(query).sort({ createdAt: -1 });
console.log(test);

效果验证

  • 当theme传['Economy','People']时,数据库中theme为['Economy','People','Technology']的文档会被匹配到(因为包含所有指定元素)
  • 当用户选择所有类别为"Any"时,request为空,query为空,find返回全部文档
  • 其他字段(如sdg、assignment_type)会按照精确匹配返回结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:54:19