MongoDB Node.js 驱动中的 MongoClient 连接详解

MongoDB Node.js 驱动中的 MongoClient 连接详解

node-mongodb-native The Official MongoDB Node.js Driver node-mongodb-native 项目地址: https://gitcode.com/gh_mirrors/no/node-mongodb-native

什么是 MongoClient

MongoClient 是 MongoDB Node.js 驱动从 1.2 版本开始引入的全新连接类,它的设计目的是在所有官方驱动中提供统一的连接接口。与传统的 Db 连接类相比,MongoClient 具有以下优势:

  1. 统一了各语言驱动的连接接口命名
  2. 默认开启了写操作确认机制
  3. 提供了更简洁的连接方式
  4. 支持连接字符串格式

MongoClient 核心方法

MongoClient 提供了以下几个核心方法:

// 构造函数
MongoClient = function(server, options);

// 实例方法
MongoClient.prototype.open
MongoClient.prototype.close
MongoClient.prototype.db

// 静态方法
MongoClient.connect

基本连接示例

下面是一个使用 MongoClient 的基本连接示例:

const MongoClient = require('mongodb').MongoClient;
const Server = require('mongodb').Server;

// 创建 MongoClient 实例
const mongoClient = new MongoClient(new Server('localhost', 27017));

// 打开连接
mongoClient.open((err, mongoClient) => {
  // 获取数据库实例
  const db = mongoClient.db("mydb");
  
  // 操作数据库...
  
  // 关闭连接
  mongoClient.close();
});

连接字符串格式

MongoClient 支持标准的 MongoDB 连接字符串格式:

mongodb://[用户名:密码@]主机1[:端口1][,主机2[:端口2],...[,主机N[:端口N]]][/数据库名][?选项]

连接字符串组成部分

  1. 协议前缀:必须以 mongodb:// 开头
  2. 认证信息:可选的 用户名:密码@ 格式
  3. 主机地址:可以是一个或多个主机地址
  4. 端口号:可选,默认为 27017
  5. 数据库名:认证时使用的数据库,默认为 "admin"
  6. 选项参数:以 ? 开头,多个选项用 & 分隔

常用连接选项

副本集配置
  • replicaSet=名称:指定副本集名称
连接配置
  • ssl=true|false|prefer:是否使用 SSL 连接
  • connectTimeoutMS=毫秒数:连接超时时间
  • socketTimeoutMS=毫秒数:socket 操作超时时间
连接池配置
  • maxPoolSize=数量:连接池最大连接数(默认 5)
写关注配置
  • w=值:写确认级别(1, majority 等)
  • wtimeoutMS=毫秒数:写确认超时时间
  • journal=true|false:是否等待日志写入
  • fsync=true|false:是否等待数据写入磁盘
认证选项
  • authSource=数据库名:认证用户所在的数据库
读偏好设置
  • slaveOk=true|false:是否允许从次级节点读取
  • readPreference=模式:读偏好模式(primary/secondary 等)
  • readPreferenceTags=标签集:按标签选择读取节点

使用 MongoClient.connect 方法

MongoClient.connect 是推荐的连接方式,它会自动选择最佳默认值(如自动重连、使用原生解析器等)。

单节点连接示例

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/testdb", (err, db) => {
  if(err) throw err;
  
  // 执行数据库操作
  db.collection("users").findOne({}, (err, result) => {
    console.log(result);
    db.close();
  });
});

副本集连接示例

MongoClient.connect(
  "mongodb://node1:27017,node2:27017/testdb?replicaSet=myReplSet&readPreference=secondary",
  (err, db) => {
    // 操作代码...
  }
);

分片集群连接示例

MongoClient.connect(
  "mongodb://mongos1:27017,mongos2:27017/testdb",
  (err, db) => {
    // 操作代码...
  }
);

连接池最佳实践

为了优化性能,应该避免在每次请求时都创建新连接。推荐的做法是:

  1. 在应用启动时创建连接
  2. 在整个应用生命周期中重用该连接
  3. 在应用关闭时关闭连接

示例:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();

let db; // 全局数据库连接

// 初始化连接
MongoClient.connect("mongodb://localhost:27017/mydb", (err, database) => {
  if(err) throw err;
  db = database;
  app.listen(3000);
});

// 在路由中重用连接
app.get("/data", (req, res) => {
  db.collection("data").find().toArray((err, results) => {
    res.json(results);
  });
});

注意事项

  1. MongoClient 默认会确认写操作,这与传统 Db 连接不同
  2. 连接字符串中的选项优先级高于代码中指定的选项
  3. 对于生产环境,建议配置适当的连接池大小和超时设置
  4. 读写偏好设置对查询性能有重要影响,应根据业务需求合理配置

通过合理使用 MongoClient,可以构建更健壮、高效的 MongoDB Node.js 应用。

node-mongodb-native The Official MongoDB Node.js Driver node-mongodb-native 项目地址: https://gitcode.com/gh_mirrors/no/node-mongodb-native

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强懿方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值