gpt4 book ai didi

node.js - 在 Atlas 上使用 ReplicaSet 的 Mongoose

转载 作者:IT老高 更新时间:2023-10-28 13:25:23 28 4
gpt4 key购买 nike

我在 MongoDB Atlas 上有一个副本集,这是我完美连接的 mongo shell 连接字符串:

$ mongo "mongodb://MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE?replicaSet=MY_REPLICASET-NAME-shard-0" --ssl --username MY_USERNAME --password MY_PASSWORD --authenticationDatabase MY_ADMIN_DATABASE

如何将其转换为在 Mongoose 中使用?如何构建我的 uri 和 options 变量?

我尝试了以下方法但没有成功:

  // connection string using mongoose:
var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE';

var options = {
replset: {
ssl: true,
authSource: 'MY_ADMIN_DATABASE',
rs_name: 'MY_REPLICASET_NAME-shard-0'
}
};

mongoose.connect(uri, options);
var db = mongoose.connection;

我尝试在选项中包含用户:并传递:,从 uri 中删除 MY_USER:MY_PASSWORD@,将 rs_name 更改为 replicaSet,每次尝试都不成功。 mongoose 似乎没有考虑 authSource 选项。

使用 mongojs,使用以下代码可以正常工作:

  // connection string using mongojs:
var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE';

var options = {
ssl: true,
authSource: 'MY_ADMIN_DATABASE',
replicaSet: 'MY_REPLICASET_NAME-shard-0'
};

var db = mongojs(uri,'', options);

但是,我需要使用 Mongoose ,因为我的项目中的 ODM。

如何使用 mongoose 构建我的 uri 和 options 变量?

最佳答案

在 MONGODB 3.4.x 上

根据“副本集连接”部分的文档 (http://mongoosejs.com/docs/connections.html),我解决了将“选项”值直接放在“uri”字符串中的问题。

// connection string using mongoose:
var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE' +
'ssl=true&replicaSet=MY_REPLICASET_NAME-shard-0&authSource=MY_ADMIN_DATABASE';

mongoose.connect(uri);
var db = mongoose.connection;

现在,它工作正常!

关于 MONGODB 3.6 的通知

在使用 3.6.x 版本的 MongoDB Atlas 上,连接字符串更改为使用 DNS 服务器,从而缩短了链接。

mongodb+srv://MY_USER:MY_PASSWORD@MY_SERVER.mongodb.net/MY_DATABASE

...如果您在应用程序中使用此连接字符串,这将成功连接,但它只能与具有更高权限访问权限的 atlas 用户(atlasAdmin、readWriteAnyDatabase...)进行读写。

如果您与特定用户一起工作,该用户仅具有读写数据库的权限,您需要保留 MongoDB 3.4 中使用的相同连接字符串,因为 mongoose 无法识别 DNS​​ 选项 (mongodb+srv)。

附: MongoDB 3.6.x 的所有新资源将继续正常工作!

关于node.js - 在 Atlas 上使用 ReplicaSet 的 Mongoose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41213148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com