Node.js 无法使用Mongoose读取/写入MongoDB Atlas数据库

Node.js 无法使用Mongoose读取/写入MongoDB Atlas数据库,node.js,mongodb,mongoose,atlas,Node.js,Mongodb,Mongoose,Atlas,我在MongoDB Atlas上有一个新的沙箱集群,我正在Node.js服务器上与mongoose连接。这是我用来连接的代码: const mongoDbUrl = `mongodb+srv://${username}:${password}@mydb-sandbox-12345.mongodb.net/testdb` mongoose.connect(mongoDbUrl) const connection = mongoose.connection connection.on('co

我在MongoDB Atlas上有一个新的沙箱集群,我正在Node.js服务器上与mongoose连接。这是我用来连接的代码:

const mongoDbUrl =
  `mongodb+srv://${username}:${password}@mydb-sandbox-12345.mongodb.net/testdb`

mongoose.connect(mongoDbUrl)
const connection = mongoose.connection

connection.on('connected', () => {
  console.log('Connected to mongodb')
})
在Atlas仪表板中,我有一个readWriteAnyDatabase用户,我正在使用该用户进行身份验证。身份验证按预期工作。我能够连接到数据库,并且不会在连接上引发任何错误。我可以通过删除密码中的一个字符来确认这一点-身份验证失败,我无法连接

问题是当我尝试插入文档时

const UserModel = require('./models/User')

UserModel.create({
  name: 'Hello Atlas'
})
我得到以下错误:

MongoError: not authorized on admin to execute command {
insert: "users",
  documents: [
    [{
      name Hello Atlas
    } {
      _id ObjectIdHex("5aa17933d72d25730a340611")
    } {
      __v 0
    }]
  ],
  ordered: false
}
据我所知,与我进行身份验证的用户应该具有在我连接的数据库上读写的权限。另一个我不明白的地方是,这个错误显示它正在试图写入admin,即使我的url连接到testdb


干杯

不确定您是否看到了这一点,但可能是因为您在一个免费集群上?希望这有帮助

更新

我进一步研究了这个问题,并自己复制了它。我也犯了同样的错误。然而,我注意到Atlas曾一度为我提供了连接字符串的选择。我回到那个页面,选择了我正在使用驱动程序3.4或更早版本

连接字符串如下所示:

const mongoDbUrl = `mongodb://${username}:${password}@cluster0-shard-00-00-1wntz.mongodb.net:27017,cluster0-shard-00-01-1wntz.mongodb.net:27017,cluster0-shard-00-02-1wntz.mongodb.net:27017/testdb?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin`;
它与该连接字符串一起工作


如果您使用的是免费集群,那么看起来MongoDB Atlas的免费版本将与v3.4一起发布。将路径中的“admin”更改为“test”: 蒙哥达+srv://username:password@cluster0-yauj8.mongodb.net/test?retryWrites=true&w=多数


这对我来说很有用,因为我的答案是@rithesh mys。用test替换它是指定db。因此,您必须将其更改为要使用的db名称。

我也遇到了同样的问题。我尝试了很多连接字符串,但是老版MongoShell 3.4或更早版本的连接字符串对我很有用

mongodb://my_username:my_password@cluster0-shard-00-00.osobw.mongodb.net:27017,cluster0-shard-00-01.osobw.mongodb.net:27017,cluster0-shard-00-02.osobw.mongodb.net:27017/my_database?ssl=true&replicaSet=atlas-xw3rfy-shard-0&authSource=admin

我认为较新版本的连接字符串不适用于mongoose,至少在免费集群中是这样。

请确保您创建的用户具有写入和读取权限。

另外一件值得注意的事情是,我尝试使用普通MongoDB驱动程序编写相同的内容,并且效果良好。我使用相同的身份验证凭据连接到相同的URL,并且我能够向testdb添加一个新的用户对象。我想知道这是否与我的猫鼬配置有关。嗯。。。我看不到任何不受支持的命令或限制适用于我的简单写操作,但这是可能的。不确定这能否解释为什么它可以通过香草驱动程序工作,但不能通过猫鼬工作,除非猫鼬在引擎盖下做了一些奇怪的事情。很好地了解了驱动程序版本。我想我在某个时候尝试过3.4连接字符串,但我以前肯定用错了。香草驱动程序使用3.6连接字符串,但mongoose不喜欢它。不过似乎有用-谢谢!回答得很好,你为我节省了很多时间。