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

使用Node.js无法连接MongoDB Cloud上部署的MongoDB集群

问题解决:Node.js连接MongoDB Atlas时出现SyntaxError: Unexpected token '.'

核心问题分析

你的报错有两个根源:

  1. Node.js版本兼容问题:你使用的Node.js 12.22.9不支持ES2020的可选链操作符(?.),但当前安装的mongodb驱动内部使用了该语法,导致编译失败。
  2. 代码逻辑错误:代码里的collection.log是不存在的方法,且collection.find({}).toArray()是异步操作,未添加await处理。

解决方案

1. 修复版本兼容问题(二选一)

选项A:升级Node.js版本

Node.js 12已停止官方维护,建议升级到14.x或更高LTS版本(如18.x),升级后可直接支持可选链语法,使用最新版mongodb驱动。

选项B:安装兼容Node.js 12的驱动版本

若暂时无法升级Node.js,执行以下命令替换驱动版本:

npm uninstall mongodb
npm install mongodb@4.17.0

4.x系列的mongodb驱动适配Node.js 12,不会使用可选链语法。

2. 修正代码错误

修正后的完整代码如下:

const { MongoClient } = require('mongodb');

// 替换< password >为你的真实密码
const uri = 'mongodb+srv://sandeepc:<password>@my-default-cluster.nopctvg.mongodb.net/?retryWrites=true&w=majority';
const database = 'sample_mflix';

const client = new MongoClient(uri, { useUnifiedTopology: true });

async function getdata() {
    try {
        // 建立连接
        await client.connect();
        console.log('成功连接到MongoDB Atlas');

        const db = client.db(database);
        const collection = db.collection('movies');

        // 查询数据(添加limit避免返回过多结果)
        const response = await collection.find({}).limit(10).toArray();
        console.log('查询结果:', response);
    } catch (err) {
        console.error('连接或查询出错:', err);
    } finally {
        // 确保连接关闭
        await client.close();
    }
}

getdata();

说明:

  • 添加try/catch捕获异常,便于排查问题
  • 修正collection.log为console.log,并给异步的toArray()添加await
  • 增加finally块保证连接正常关闭
  • 给find添加limit(10)避免一次性返回大量数据(可根据需求调整)

验证步骤

  1. 按照上述方案解决版本兼容问题
  2. 替换代码中的<password>为你的真实密码
  3. 运行代码,若看到成功连接到MongoDB Atlas及查询结果,说明问题解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:58:20