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

