Error mongodb connect: 使用Mongoose连不上mongodb官方数据库

起因

使用mongoose官方文档的connect连Mongodb cloud免费数据库,始终连不上

复制代码
await mongoose.connect('mongodb://127.0.0.1:27017/test');

就一句代码,一个api,一个url多简单。死活连不上,困扰了我好久。

原本一开始我没有用mongoose,直接用的mongodb官方库创建连接没问题,还能增删改查

复制代码
const client = new MongoClient(url)

同样一个api,一个url,就能连上Mongodb数据库。

分析

Mongodb cloud免费数据库url一般是:
mongodb+srv://test:<db_password>@notes.wwwdz.mongodb.net/?retryWrites=true&w=majority&appName=notes

而mongoose 给的示例代码里面的url是 mongodb://127.0.0.1:27017/test

很明显前者多了个 +srv, 同时后者通过/test 来制定数据库名称。但是Mongodb Cloud的免费数据库url是通过?&appName=notes 参数的形式指定!!!

解决

认真查看了mongoose官方文档找到了 mongoose.connect() 这个api的文档!

他有两个参数:

  1. 第一个是url,也就是数据库地址

  2. 第二个是options,一个对象
    贴一下原话:
    ···
    The connect method also accepts an options object which will be passed on to the underlying MongoDB driver.
    ···
    也就是一个options对象,这个对象会被传给底层的mongodb 驱动器
    继续看文档,当看到mongodb+srv 的时候,就知道找到问题所在了!!!

    用mongoose连mongodb cloud免费数据库的时候要手动加上 dbName
    url可以直接是从mongodb粘贴出来的那个url。

    await mongoose.connect(url, {dbName: '数据库名称'});

总结

很扯淡的一个问题,折腾了好几个小时。一开始我还以为连接copy错了。还特地把url放到.env环境变量的文件中去,但是用mongodb 默认的client连接就没问题!但是一用mongoose就出错。没想到是mongoose需要通过options对象多配置一下数据库名称!!!得多看文档不要想当然认为。

相关推荐
Elastic 中国社区官方博客3 小时前
Elasticsearch:使用 Agent Builder 的 A2A 实现 - 开发者的圣诞颂歌
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
2301_816660213 小时前
PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】
jvm·数据库·python
CV工程师(Ctrl)4 小时前
OpenClaw 安装与飞书接入(2026-04-19)
node.js·github·飞书·火山引擎·openclaw
qq_372154234 小时前
Go 中自定义类型与基础类型的显式转换规则详解
jvm·数据库·python
_下雨天.4 小时前
NoSQL之Redis配置与优化
数据库·redis·nosql
LiAo_1996_Y5 小时前
CSS如何实现文字渐变效果_通过background-clip实现艺术字
jvm·数据库·python
2401_887724505 小时前
CSS如何让表单在手机端友好展示_利用Flexbox实现堆叠排版
jvm·数据库·python
数据库小组5 小时前
MySQL 删库后怎么恢复?binlog2sql 之外,NineData 还能做什么
数据库·sql·mysql·安全·数据·ninedata·删库
zhangchaoxies5 小时前
Layui轮播图(carousel)怎么设置自动播放间隔
jvm·数据库·python
切糕师学AI5 小时前
HBase:一文搞懂分布式宽列数据库(原理 + 架构 + 实战)
数据库·分布式·nosql·hbase·分布式宽列数据库·wide column db