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

Mongo Shell遍历MongoDB集合时遇TypeError问题求助

问题分析与解决

1. db.listCollections is not a function 错误原因及修复

mongosh中db.listCollections()是合法方法,报错通常是以下两种情况:

  • db对象未正确初始化:脚本里可能没正确连接MongoDB实例或选择数据库。确保脚本开头有正确的连接逻辑,比如:
    // 连接本地实例并指定目标数据库
    const db = connect('mongodb://localhost:27017/your_target_db');
    
    注意:mongosh的connect()直接返回数据库对象,赋值给db即可,无需额外操作。
  • mongosh版本过低:旧版本mongosh存在方法兼容问题,升级到最新版就能解决。

2. collections is not async iterable 错误修复

用runCommand执行listCollections后,返回的是包含cursor字段的结果对象,不是直接可迭代的集合列表。你需要先提取cursor再处理:

方法1:同步迭代cursor内容

const result = db.runCommand({ listCollections: 1 });
// firstBatch里是集合信息数组
result.cursor.firstBatch.forEach(col => {
  console.log('集合名称:', col.name);
});

方法2:转为数组后遍历

const result = db.runCommand({ listCollections: 1 });
const collections = result.cursor.firstBatch;
for (const col of collections) {
  console.log(col.name);
}

方法3:用async/await异步处理

如果要异步迭代,优先用db.listCollections()(确认db对象正常后),配合toArray()转换:

async function fetchCollections() {
  const collections = await db.listCollections().toArray();
  for (const col of collections) {
    console.log('集合:', col.name);
  }
}
fetchCollections();

完整验证脚本示例

// 连接数据库
const db = connect('mongodb://localhost:27017/test_db');

// 推荐:用db.listCollections()的异步方案
async function listAllCollections() {
  try {
    const collections = await db.listCollections().toArray();
    console.log('当前数据库的所有集合:');
    collections.forEach(col => console.log(`- ${col.name}`));
  } catch (err) {
    console.error('获取集合失败:', err);
  }
}

// 执行方法
listAllCollections();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:04:58