Я пытаюсь реализовать одну транзакцию для подключения к нескольким базам данных в mongodb.Но он застрял в startSession ().У меня есть два дБ (набор реплик) и два подключения для каждого.
var express = require('express');
var router = express.Router();
const mongoose = require('mongoose');
//set replica set
const options = { replicaSet: 'replocal', useNewUrlParser: true, };
// create connection from diffrent db
var conn = mongoose.createConnection('mongodb://localhost:27017/db1', options);
var conn2 = mongoose.createConnection('mongodb://localhost:27017/db2', options);
// create account in diffent db
const AccountFromdb1 = conn.model('AccountFromdb1', new mongoose.Schema({ name: String, balance: Number }));
const AccountFromdb2 = conn2.model('AccountFromdb2', new mongoose.Schema({ name: String, balance: Number }));
/* transaction test */
router.get('/transaction', async function (req, res, next) {
// Insert accounts and transfer some money
await AccountFromdb1.create({ name: 'A', balance: 5 });
await AccountFromdb2.create({ name: 'B', balance: 10 });
//start session
const session = await mongoose.startSession(); // <--- stuck here
session.startTransaction();
try {
const opts = { session, new: true };
const A = await AccountFromdb1.
findOneAndUpdate({ name: 'A' }, { $inc: { balance: -5 } }, opts);
if (A.balance < 0) {
throw new Error('Insufficient funds: ' + (A.balance + 5));
}
await AccountFromdb2.
findOneAndUpdate({ name: 'B' }, { $inc: { balance: 5 } }, opts);
await session.commitTransaction();
session.endSession();
next();
} catch (error) {
// If an error occurred, abort the whole transaction.
await session.abortTransaction();
session.endSession();
throw error;
}
});
module.exports = router;
В дополнение к транзакциям формы документа MongoDB:
Вы можете указать чтение / запись (CRUD)операции с существующими коллекциями.Коллекции могут находиться в разных базах данных ref