如何在Mongoose的find()方法中传入动态键值对进行查询
解决Mongoose find()动态键查询问题
你遇到的问题是因为在对象字面量中直接写key会被解析成固定字符串键名,而非变量key的实际值。要生成带动态键的查询对象,用ES6的计算属性名就能解决,同时还要注意forEach搭配异步函数的执行逻辑问题。
核心修复:动态生成查询对象
把查询对象的键用方括号[]包裹,这样就会将变量key的实际值作为对象属性名:
const query = { [key]: value };
完整修改代码
并行执行查询(保留原forEach逻辑,不等待异步任务完成)
const relatedDoc: any = { idle_screen: 1, verify_address: 2, update_address: 3 }; // 修复动态键生成逻辑 Object.entries(relatedDoc).forEach(async ([key, value]) => { const query = { [key]: value }; // 现在会生成 {idle_screen:1}、{verify_address:2} 这类预期对象 const appointmentRefDocs = await appointment.find(query); // 此处可处理查询返回的结果 });
顺序执行查询(如需等待前一个查询完成再执行下一个)
由于forEach不会等待异步函数执行完毕,如果需要按顺序处理每个查询,建议改用for...of循环:
const relatedDoc: any = { idle_screen: 1, verify_address: 2, update_address: 3 }; // 用for...of顺序执行异步操作 for (const [key, value] of Object.entries(relatedDoc)) { const query = { [key]: value }; const appointmentRefDocs = await appointment.find(query); // 处理当前查询的结果 }
内容的提问来源于stack exchange,提问作者deepak tinku
相关产品推荐
相关产品推荐

