微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 在Atlas上使用ReplicaSet进行Mongoose

我在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

如何将其转换为在猫鼬中使用?我如何构建我的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;

我尝试过包含user:和pass:on options,从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-02-clv3h.mongodb.net:27017/MY_DATABASE';

  var options = {
    ssl: true,replicaset: 'MY_replicaset_NAME-shard-0'
  };

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

但是,我需要使用mongoose,因为我的项目中有ODM.

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

解决方法

ON MONGODB 3.4.x

根据“副本集连接”部分的文档(http://mongoosejs.com/docs/connections.html),我解决了这个问题,将’options’值直接放在’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的所有新资源将继续正常运行!

原文地址:https://www.jb51.cc/nodejs/241068.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐