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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:30:57