同一项目如何连接多个mongo服务器地址

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 同一项目如何连接多个mongo服务器地址

前言

在开发途中,我们可能需要在同一个项目中链接多个不同mongo服务器地址或者同一个mongo服务器地址下不同集合!此时采用mongoose.connect链接是不行的!
这时候,你需要使用mongoose.createConnection方法进行连接数据库!
以下,我将使用一个例子来向大家讲述这个方法。这个方法中,不同的mongo集合,我使用了同一套Schema;

1. 连接不同的数据库/集合

由于在mongoose中,链接之后,会形成一个自身的mongo实例集合,所以我们需要把想要的Schema挂到对应的mongo实例上;

/models/db_one.js

const mongoose = require('mongoose');
//链接本地test_one集合 mongodb://localhost/test_one 
let dbOne = mongoose.createConnection(`mongodb://localhost/test_one`);
dbOne.on('err', function () {
   
  console.log('dbOne:连接数据库失败');
});
dbOne.once('open', function () {
   
  console.log('dbOne:连接数据库成功');
});

//导入Schema
dbOne.model('User', require('./schemas/user'));

//导出
module.exports = dbOne;

/models/db_two.js

const mongoose = require('mongoose');
//链接线上阿里云test2集合 mongodb://localhost/test_one
/**
 * name 数据库服务器登陆账号 
 * password 数据库服务器登陆密码
 * ip 服务器ip
 */
let dbTwo = mongoose.createConnection(`mongodb://${name}:${password}@${
     ip}:27017/test2?authSource=admin`);
dbTwo.on('err', function () {
   
  console.log('dbTwo:连接数据库失败');
});
dbTwo.once('open', function () {
   
  console.log('dbTwo:连接数据库成功');
});

//导入Schema
dbTwo.model('User', require('./schemas/user'));

//导出
module.exports = dbTwo;

/models/db_three.js

const mongoose = require('mongoose');
//链接本地test_three集合 mongodb://localhost/test_three 
let dbThree = mongoose.createConnection(`mongodb://localhost/test_three`);
dbThree.on('err', function () {
   
  console.log('dbThree:连接数据库失败');
});
dbThree.once('open', function () {
   
  console.log('dbThree:连接数据库成功');
});

//导入Schema
dbThree.model('User', require('./schemas/user'));

//导出
module.exports = dbThree;

写一个Schema
/models/schemas/user.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const User = new Schema({
   
  name: {
   
    type: String,
    index: true,
    default: null
  },
  age: {
   
    type: Number,
    default: 0
  },
  register_time: {
   
    type: Date,
    default: Date.now()
  },
  remark: {
   
    type: String,
    default: null
  },
  vip: {
   
    type: Boolean,
    default: false
  },
  address: {
   
    type: String,
    default: null
  }
});
// 添加伙伴
User.statics.add = function (data) {
   
  return this.create(data);
};

module.exports = User;

以上:
db_one与db_two属于链接不同的mongo服务器地址;
db_one与db_three属于链接同一个的mongo服务器地址的不同集合;

2. 使用

实际使用mongo方法如下:

let express = require('express');
let router = express.Router();
//引入相关mongo
let dbOne = require('../models/db_one');
let dbTwo = require('../models/db_two');
let dbThree = require('../models/db_three');
router.post('/', async function (req, res, next) {
   
  try {
   
    let {
    type, name } = req.body;
    let data = {
    name, age: 10 };
    //根据不同的type,向不同的数据库写入数据
    if (type === '1') {
   
      //dbOne为mongo实例,所以需要使用dbOne.models获取到当前实例的models集合;
      //使用dbOne.models.具体某个model,获取所需要的model,之后的model静态方法可以以正常操作使用;
      await dbOne.models.User.add(data);
    } else if (type === '2') {
   
      await dbTwo.models.User.add(data);
    } else if (type === '3') {
   
      await dbThree.models.User.add(data);
    }
    return res.json({
    code: '200', message: '成功' });
  } catch (error) {
   
    return res.json({
    code: '500', message: '失败' });
  }
});

module.exports = router;

3. 结语

链接不同的数据库,如果需要,可以自行优化,比如,链接地址配置化、将多个链接合并到同一个方法中输出,便于扩展和后续维护;
mongoose文档:https://mongoosejs.com/docs/migrating_to_6.html

目录
相关文章
|
2月前
|
安全
基于Reactor模式的高性能服务器之Acceptor组件(处理连接)
本节介绍了对底层 Socket 进行封装的设计与实现,通过 `Socket` 类隐藏系统调用细节,提供简洁、安全、可读性强的接口。重点包括 `Socket` 类的核心作用(管理 `sockfd_`)、成员函数的功能(如绑定地址、监听、接受连接等),以及 `Acceptor` 组件的职责:监听连接、接收新客户端连接并分发给上层处理。同时说明了 `Acceptor` 与 `EventLoop` 和 `TcpServer` 的协作关系,并展示了其成员变量和关键函数的工作机制。
64 2
|
3月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
183 14
|
5月前
|
JavaScript Linux Python
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
302 20
|
5月前
|
域名解析 网络协议 安全
DNS服务器地址大全
DNS(域名系统)是互联网的“电话簿”,将域名解析为IP地址。选择优质DNS服务器可提升网络速度、降低延迟。以下是全球及中国各运营商的DNS服务器列表,包括公共DNS(如Google DNS、Cloudflare DNS)、中国电信、联通、移动等。根据地理位置、稳定性、安全性与隐私保护等因素选择适合的DNS服务器,优化上网体验。
13208 6
|
6月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
653 1
|
6月前
|
存储 弹性计算 固态存储
阿里云服务器租用价格参考:云服务器各收费项目收费标准与活动价格
阿里云服务器收费项目有实例价格、预留实例券、专有宿主机、块存储价格、存储容量单位包、带宽价格和快照服务价格,收费模式有包年包月和按量付费模式。本文为大家汇总了2025年阿里云服务器各个收费项目的最新收费标准与云服务器的最新活动价格,以供参考和了解。
|
9月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
11月前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
2069 3
|
11月前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
11月前
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?

热门文章

最新文章