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

如何在MongoDB中通过数组值循环执行查询?尝试后未生效

解决MongoDB循环查询文档的问题

最优方案:使用$in一次性查询

没必要循环执行多次find,MongoDB的$in操作符可以直接匹配数组中的所有code_id,一次查询就能拿到所有目标数据,效率更高:

var ar = ["26","81","85","19","14","71"];
// 一次性查询所有符合code_id的文档
var results = db.Status.find(
  {"code_id": {"$in": ar}},
  {"Name": 1, "AMOUNT": 1, "_id": 0} // 可添加_id:0排除默认返回的_id字段
);
// 遍历游标输出结果
results.forEach(function(doc) {
  printjson(doc);
});

修正你的循环查询代码

你原来的代码无效是因为db.Status.find()返回的是游标对象,不是直接的查询结果,直接print(obj)只会打印游标,不会输出文档内容。需要遍历游标来获取数据:

普通for循环写法

var ar = ["26","81","85","19","14","71"];
for(var i=0; i<ar.length; i++){
  var cursor = db.Status.find({"code_id": ar[i]}, {"Name": 1, "AMOUNT": 1});
  // 遍历游标输出每个文档
  cursor.forEach(function(doc) {
    printjson(doc);
  });
};

forEach循环遍历数组写法

var ar = ["26","81","85","19","14","71"];
ar.forEach(function(code) {
  var cursor = db.Status.find({"code_id": code}, {"Name": 1, "AMOUNT": 1});
  cursor.forEach(function(doc) {
    printjson(doc);
  });
});

补充说明

  • 优先使用$in方案,减少数据库请求次数,提升性能
  • printjson()可以格式化输出文档内容,比print()更易读
  • 如果确定每个code_id对应单个文档,可用findOne()代替find(),直接返回文档对象而非游标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:31:08