MongoDB数据库3.2和4.4两个不同版本的启动和运行方法

本文介绍了在Window11系统下MongoDB 3.2和4.4版本的不同启动方法。3.2版本需要手动创建data文件夹,并通过指定路径启动服务;而4.4版本则自带data文件夹,启动更为简便。

主要基于3.2和4.4两个不同版本的启动和运行方法,用的是Window11系统

目录

主要基于3.2和4.4两个不同版本的启动和运行方法,用的是Window11系统

        3.2版本:

     4.4版本:


        3.2版本:

        3.2版本在安装的时候没有自动生成存放记录的data目录(打开安装完毕的MongoDB文件夹,在存放bin目录的同级目录下可以看到没有data文件夹。比3.2高的版本一般安装好后,一般都会自带data文件夹)。如下图:

所以需要自己先手动建一个。比如可以直接建在D盘下,可以自命名(D:\db)。建好之后,前往bin目录下,按住Shift键,然后右键选择打开终端,在终端中输入:

.\mongod.exe --dbpath=D:\db

( bin目录下会有mongod.exe 、mongo.exe 两个可执行文件,我们将要用到 ) 后面的 D:\db 是自己设置的 data 目录的位置。点击回车之后,如果显示的内容与下图类似,则表示已经正常启动。

 正常启动之后,这个窗口不要关闭,因为运行需要他的支持。我们再在bin目录下打开一个新的终端,输入:

.\mongo.exe

 如果显示上图结果,则表示可以正常运行,则可以在此窗口进行响应的MongoDB操作:

     4.4版本:

        关于4.4版本,在bin目录所在的目录中是有自带的data文件夹的。

        我们直接在bin目录里面打开终端,然后输入:

.\mongo.exe

然后回车就能启动并运行MongoDB了,直接在当前终端窗口中输入指令即可。

 

<think>我们正在讨论的是Windows下单机MongoDB 4.4开启事务后客户端的访问方法。首先需要明确,MongoDB4.0版本开始支持多文档事务,在4.4版本中得到增强(支持分片集群事务)。但在单机环境下,事务操作与副本集或分片集群的配置有所不同。不过,单机环境下的事务使用方式与副本集基本一致(因为单机可以视为只有一个节点的副本集),但默认情况下,单机部署并不支持事务,需要配置为副本集(即使只有一个节点)。 根据MongoDB官方文档,事务需要在副本集或分片集群中才能启用。因此,在Windows单机环境下,我们需要将MongoDB实例配置为单节点副本集,然后才能使用事务。 步骤概述: 1. 将单机MongoDB实例配置为单节点副本集。 2. 启动MongoDB服务。 3. 客户端连接后,在支持事务的会话中执行事务操作。 详细步骤: ### 步骤1:配置单节点副本集 假设MongoDB已经安在Windows上,并且数据目录为`C:\data\db`。 1.1 创建配置文件`mongod.cfg`(例如在`C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg`),内容如下: ``` storage: dbPath: C:\data\db replication: replSetName: rs0 ``` 1.2 以副本集模式启动MongoDB服务。如果已经安为Windows服务,则需要重新安服务并指定配置文件;或者通过命令行启动: ```powershell mongod --config "C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg" --install net start MongoDB ``` 1.3 初始化副本集。连接mongo shell: ```powershell mongo ``` 在shell中执行: ```javascript rs.initiate() ``` 等待副本集初始化完成。初始化后,shell提示符会变成`rs0:PRIMARY>`。 ### 步骤2:确保MongoDB版本4.4 在shell中执行: ```javascript db.version() ``` 确认版本4.4.x。 ### 步骤3:客户端使用事务 以Node.js客户端为例(其他语言类似),展示事务操作的基本流程。 3.1 安Node.js的MongoDB驱动: ```bash npm install mongodb ``` 3.2 编写事务代码示例(使用async/await): ```javascript const { MongoClient } = require(&#39;mongodb&#39;); async function main() { // 连接URI,注意副本集名称rs0 const uri = "mongodb://localhost:27017/?replicaSet=rs0"; const client = new MongoClient(uri); try { await client.connect(); // 创建会话 const session = client.startSession(); // 事务操作 await session.withTransaction(async () => { const coll1 = client.db(&#39;db1&#39;).collection(&#39;coll1&#39;); const coll2 = client.db(&#39;db2&#39;).collection(&#39;coll2&#39;); // 在事务中执行操作(这里以插入为例) await coll1.insertOne({ a: 1 }, { session }); await coll2.insertOne({ b: 2 }, { session }); // 如果这里抛出错误,事务将中止 }); } finally { await client.close(); } } main().catch(console.error); ``` 关键点: - 连接字符串中必须指定副本集名称(`replicaSet=rs0`),即使只有一个节点。 - 在事务中执行的所有操作都必须传递`session`选项。 - 事务内操作必须使用相同的会话(session)。 ### 注意事项: 1. 事务默认超时时间为60秒,可通过配置调整。 2. 事务中涉及的数据量较大时,需注意事务占用的内存(不能超过16MB的单个文档限制,但事务操作可以涉及多个文档,总大小由内存池限制,需监控)。 3. 在单节点副本集上,事务的持久性依赖于该节点的持久化设置(写关注为majority,单节点副本集也认为写操作是majority)。 关于写关注:在事务提交时,MongoDB使用`"majority"`写关注。在单节点副本集中,由于只有一个节点,所以也能满足。 引用说明: - 配置单节点副本集是使用事务的前提[^1]。 - 事务操作需要在会话中执行,并且传递会话到每个操作[^2]。 以上就是在Windows下单机MongoDB 4.4开启事务后客户端的访问方法。 §§相关问题§§ 1. MongoDB事务有哪些限制? 2. 如何在MongoDB分片集群中使用事务? 3. MongoDB事务的隔离级别是怎样的? 4. 如何优化MongoDB的事务性能? </think>### Windows下单机MongoDB 4.4事务客户端访问方法 在Windows单机环境下启用MongoDB 4.4事务功能后,客户端访问需遵循以下步骤: --- #### 1. **配置副本集(事务必需)** MongoDB单机事务要求实例配置为**单节点副本集**(即使只有一台服务器): ```yaml # mongod.cfg 配置文件 storage: dbPath: C:\data\db replication: replSetName: rs0 # 关键配置项[^1] ``` 初始化副本集: ```powershell mongo > rs.initiate() # 初始化单节点副本集 > rs.status() # 确认状态为"PRIMARY" ``` #### 2. **启用事务支持** 在客户端代码中显式开启会话: ```javascript // Node.js 示例 const session = client.startSession(); session.startTransaction({ readConcern: { level: "snapshot" }, writeConcern: { w: "majority" } }); try { // 事务操作1 await db.collection("orders").insertOne( { item: "A", qty: 10 }, { session } ); // 事务操作2 await db.collection("inventory").updateOne( { item: "A" }, { $inc: { qty: -10 } }, { session } ); await session.commitTransaction(); // 提交事务[^2] } catch (error) { await session.abortTransaction(); // 回滚事务 } finally { session.endSession(); } ``` #### 3. **关键客户端配置** | 配置项 | 要求 | 说明 | |--------|------|------| | **连接字符串** | `mongodb://localhost:27017/?replicaSet=rs0` | 必须指定副本集名称 | | **驱动版本** | Node.js: 3.6+<br>Python: PyMongo 3.7+ | 支持事务的最低版本 | | **会话传递** | 所有事务操作需传入`{ session }`参数 | 强制要求 | | **写关注** | `{ w: "majority" }` | 保证持久性 | #### 4. **事务限制与注意事项** 1. **超时控制** 事务默认60秒超时,需监控并调整: ```javascript startTransaction({ maxCommitTimeMS: 60000 // 单位毫秒 }) ``` 2. **操作限制** - ❌ 禁止DDL操作(如`createCollection`) - ❌ 禁止跨数据库事务 - ✔️ 单事务文档数 ≤ 1000 3. **错误处理** 需捕获两类异常: ```javascript } catch (error) { if (error.errorLabels?.includes("TransientTransactionError")) { // 可重试错误(如冲突) } else { // 不可恢复错误 } } ``` --- ### 验证事务功能 ```javascript // 检查事务计数器 use admin db.runCommand({ serverStatus: 1 }).transactions ``` 输出示例: ```json { "current": 0, "totalCommitted": 3, // 已提交事务数 "totalAborted": 1 // 已中止事务数[^3] } ``` > **关键说明**: > - Windows防火墙需开放27017端口 > - 开发环境建议使用[MongoDB Memory Server](https://www.npmjs.com/package/mongodb-memory-server)简化测试 > - 生产环境必须启用认证(参考用户前序问题中的账户配置方法)[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bodyHealthy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值