同一项目如何连接多个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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
1月前
|
关系型数据库 MySQL Java
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
这篇文章介绍了在腾讯云服务器上使用Docker安装常见软件的过程,包括安装MySQL、Redis和Tomcat,并提供了解决连接问题的方法。同时,还涉及了服务器中安装JDK 1.8的步骤和如何将项目打包部署到服务器上的指导,包括注意事项和操作提示。
腾讯云服务器的使用、服务器中使用Docker安装常见的软件、如何将一个项目发布到服务器
|
1月前
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
|
25天前
|
数据可视化 Ubuntu Linux
PyCharm连接远程服务器配置的全过程
相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。 通常服务器系统采用Linux,而我们平常使用频繁的是Windows系统,二者在操作方面存在很大的区别,比如我们实验室的服务器采用Ubuntu系统,创建远程交互任务时可以使用Terminal终端或者VNC桌面化操作,我觉得VNC很麻烦,所以采用Terminal进行实验,但是Terminal操作给我最不好的体验就是无法可视化中间实验结果,而且实验前后的数据上传和下载工作也让我头疼不已。
|
23天前
|
运维 数据安全/隐私保护 数据库管理
企业实战项目之服务器用户权限集中管理
企业实战项目之服务器用户权限集中管理
|
22天前
|
网络安全 数据安全/隐私保护
VSC通过 SSH 连接到远程服务器时,每次都需要输入密码
VSC通过 SSH 连接到远程服务器时,每次都需要输入密码
111 0
|
23天前
|
Linux 网络安全 网络架构
如何处理在学校Linux连接不上服务器
如何处理在学校Linux连接不上服务器
34 0
|
1月前
|
网络协议 安全 架构师
详解 | 一台服务器最大能支持多少条TCP连接?
详解 | 一台服务器最大能支持多少条TCP连接?
|
弹性计算 前端开发 Java
初体验ECS搭建项目
经常需要帮忙填写电子表格,用的是图片识别然后手动填充表格,比较费时间,于是想做一个自动填充表格的小demo。
初体验ECS搭建项目
|
10天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考

热门文章

最新文章