Fixing MongoDB Transaction Error in Node.js (Windows)
When working with Mongoose transactions in a Node.js project, you might encounter this error:
Transaction numbers are only allowed on a replica set member or mongos
This happens because MongoDB transactions require a replica set, even for local development. A fresh MongoDB installation on Windows runs as a standalone server that doesn't support transactions. Here's how to fix it.
Why This Happens
MongoDB transactions depend on replication infrastructure for:
Write durability
Rollback capability
Consistent snapshots
Even with a single MongoDB instance, you need to configure it as a single-node replica set.
The Solution: Enable Replica Set on Windows
Step 1: Edit MongoDB Configuration
Open the MongoDB config file (usually at C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg) and add the replication settings:
systemLog:
destination: file
path: C:\Program Files\MongoDB\Server\7.0\log\mongod.log
logAppend: true
storage:
dbPath: C:\Program Files\MongoDB\Server\7.0\data
net:
bindIp: 127.0.0.1
port: 27017
replication:
replSetName: rs0
⚠️ Important: YAML is space-sensitive. Use spaces, not tabs.
Step 2: Restart MongoDB Service
Open Command Prompt as Administrator and run:
net stop MongoDB
net start MongoDB
Step 3: Initialize the Replica Set
Open a new Command Prompt and run:
mongosh
Once connected, initialize the replica set:
rs.initiate();
You should see { ok: 1 }.
Verify the status:
rs.status();
Look for "stateStr": "PRIMARY" in the output.
Step 4: Update Your Connection String
Update your Mongoose connection to include the replica set parameter:
mongoose.connect("mongodb://127.0.0.1:27017/mydb?replicaSet=rs0");
For MongoDB Compass, use:
mongodb://127.0.0.1:27017/?replicaSet=rs0
Alternative Method: Command Line Approach
If you prefer not to modify the config file or need a temporary solution, you can start MongoDB manually with replica set enabled:
Step 1: Stop the MongoDB Service
net stop MongoDB
Step 2: Start MongoDB with Replica Set Flag
Open Command Prompt as Administrator and run:
mongod --dbpath "C:\Program Files\MongoDB\Server\7.0\data" --replSet rs0
Adjust the --dbpath if your data folder is in a different location.
Step 3: Initialize the Replica Set
Open another Command Prompt and run:
mongosh
Then initialize:
rs.initiate();
Note: With this approach, you need to run the mongod command each time you want to start MongoDB. For a permanent solution, use the config file method above.
Using Transactions in Mongoose
Now transactions will work properly:
const session = await mongoose.startSession();
await session.withTransaction(async () => {
await User.create([{ name: "Rakib" }], { session });
await Wallet.updateOne(
{ userId: 1 },
{ $inc: { balance: -10 } },
{ session },
);
});
session.endSession();
Troubleshooting
Connection Timeout After Configuration
If MongoDB Compass or your application can't connect after making configuration changes:
Verify MongoDB is running:
netstat -ano | findstr 27017You should see:
TCP 127.0.0.1:27017 LISTENINGCheck the MongoDB log file at
C:\Program Files\MongoDB\Server\7.0\log\mongod.logfor errorsEnsure replica set is initialized:
Connect with
mongosh mongodb://127.0.0.1:27017Run
rs.initiate()if not already doneCheck
rs.status()to confirm"stateStr": "PRIMARY"
Common Configuration Errors
YAML syntax errors: Use spaces (not tabs) for indentation in
mongod.cfgMissing replica set initialization: The warning
Collection [local.oplog.rs] not foundappears until you runrs.initiate()Wrong connection string: Always include
?replicaSet=rs0when connecting to a replica set
If Service Won't Start
Check
mongod.cfgsyntax (especially spacing in the YAML)Review the last lines in the MongoDB log file
Ensure file paths in the config match your installation
Summary
| Issue | Solution |
|---|---|
| Standalone MongoDB | Doesn't support transactions |
| Fix | Enable single-node replica set |
| Config | Add replication: replSetName: rs0 to mongod.cfg |
| Initialize | Run rs.initiate() in mongosh |
| Connection | Add ?replicaSet=rs0 to connection string |
✅ After completing these steps, MongoDB transactions will work perfectly in your Node.js application.

