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

使用Node.js访问MongoDB的tutorial集合时返回undefined问题

问题原因及解决方案

核心问题是异步操作未完成就关闭MongoDB连接:

  • collection.find().toArray()是异步回调函数,它的执行会被放入事件循环的后续队列。你在调用这个方法后立刻执行client.close(),导致MongoDB连接在查询操作完成前就被强制关闭,回调函数里的data无法获取到有效数据,最终输出undefined。

修正方案1:将连接关闭操作放到查询回调内

把client.close()移到toArray的回调函数中,确保只有在查询完成(无论成功或失败)后才关闭连接:

const mongodb = require("mongodb");
const express = require("express");
var app = express();
var mongoClient = mongodb.MongoClient;
var conn = "mongodb://localhost:27017";

mongoClient.connect(conn, (err, client) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log("connection established");
  var db = client.db("mydb");
  var collection = db.collection("tutorial");
  
  collection.find().toArray((err, data) => {
    if (err) {
      console.log(err);
      client.close();
      return;
    }
    console.log(data);
    client.close(); // 查询完成后关闭连接
  });
});

修正方案2:使用async/await简化异步逻辑(推荐)

现代Node.js更推荐用async/await处理异步操作,代码可读性更高,也更容易避免回调嵌套的问题:

const mongodb = require("mongodb");
const express = require("express");
var app = express();
var mongoClient = mongodb.MongoClient;
var conn = "mongodb://localhost:27017";

async function fetchTutorialDocs() {
  let client;
  try {
    // 建立连接
    client = await mongoClient.connect(conn);
    console.log("connection established");
    // 获取数据库和集合
    const db = client.db("mydb");
    const collection = db.collection("tutorial");
    // 查询所有文档并转为数组
    const data = await collection.find().toArray();
    console.log(data);
  } catch (err) {
    // 捕获所有错误
    console.log(err);
  } finally {
    // 确保无论是否出错,连接都会被关闭
    if (client) {
      await client.close();
    }
  }
}

// 执行函数
fetchTutorialDocs();

额外排查点

如果修正后仍有问题,建议检查:

  • MongoDB服务是否正常运行在localhost:27017端口
  • mydb数据库是否存在,且tutorial集合内有实际文档
  • 当前执行代码的用户是否拥有访问该数据库和集合的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:05:33