Transaksi di mongodb node js

Pada artikel ini, kita akan belajar tentang Transaksi MongoDB. Kami memiliki tiga pertanyaan umum di sini tentang Transaksi

1. Apa itu Transaksi?
2. Mengapa kami menggunakan Transaksi?
3. Di mana menggunakan Transaksi?

Jawabannya sangat sederhana, Transaksi sama seperti transaksi bank kita

1. Apa itu Transaksi?
Menjawab. Dengan kata sederhana, Transaksi pada dasarnya adalah untuk mengubah beberapa operasi baca-tulis menjadi operasi atom (Tunggal). MongoDB merilis transaksi dari 4. 0 dan seterusnya
e. g. Admin ingin memperbarui status aktif untuk semua pengguna, jadi dia akan menggunakan updateMany atau memperbarui dengan 'banyak. pilihan yang benar. Setiap kueri (updateMany/update) memperbarui semua dokumen, pembaruan setiap dokumen adalah operasi atomik, tetapi keseluruhan proses bukanlah operasi atomik

MongoDB 4. 0 Transaksi pada dasarnya tersedia untuk set replika dan MongoDB 4. 2 Transaksi tersedia untuk Sharding

Transaksi baru di MongoDB 4. 0 dan luwak 5. 2. 0. Transaksi memungkinkan Anda menjalankan beberapa operasi secara terpisah dan berpotensi membatalkan semua operasi jika salah satunya gagal. Panduan ini akan membantu Anda mulai menggunakan transaksi dengan Mongoose

Jika Anda belum melakukannya, impor luwak

import mongoose from 'mongoose';

Untuk membuat transaksi, pertama-tama Anda harus membuat sesi menggunakan atau atau

Dalam praktiknya, Anda harus menggunakan fungsi Connection#transaction() Mongoose atau Mongoose untuk menjalankan transaksi. Pegangan pembantu session.withTransaction()

  • Membuat transaksi
  • Melakukan transaksi jika berhasil
  • Membatalkan transaksi jika operasi Anda melempar
  • Mencoba kembali jika terjadi kesalahan transaksi sementara

Untuk informasi selengkapnya tentang fungsi ClientSession#withTransaction()_, silakan lihat

Fungsi Connection#transaction() Mongoose adalah pembungkus di sekitar

[require:transactions.*can save document after aborted transaction]
1 yang mengintegrasikan pelacakan perubahan Mongoose dengan transaksi. Misalnya, Anda
[require:transactions.*can save document after aborted transaction]
2 dokumen dalam transaksi yang kemudian gagal. Perubahan dalam dokumen itu tidak dipertahankan ke MongoDB. Fungsi Connection#transaction() menginformasikan pelacakan perubahan Mongoose bahwa
[require:transactions.*can save document after aborted transaction]
2 dibatalkan, dan menandai semua bidang yang diubah dalam transaksi sebagai diubah

[require:transactions.*can save document after aborted transaction]
_

Jika Anda mendapatkan dokumen Mongoose dari atau menggunakan sesi, dokumen tersebut akan menyimpan referensi ke sesi tersebut dan menggunakan sesi itu untuk

Untuk mendapatkan/mengatur sesi yang terkait dengan dokumen tertentu, gunakan

Fungsi

[require:transactions.*can save document after aborted transaction]
9 juga mendukung transaksi. Agregasi luwak memiliki yang mengatur. Di bawah ini adalah contoh mengeksekusi agregasi dalam transaksi

const Event = db.model('Event', new Schema({ createdAt: Date }), 'Event');

let session = null;
return Event.createCollection().
  then(() => db.startSession()).
  then(_session => {
    session = _session;
    session.startTransaction();
    return Event.insertMany([
      { createdAt: new Date('2018-06-01') },
      { createdAt: new Date('2018-06-02') },
      { createdAt: new Date('2017-06-01') },
      { createdAt: new Date('2017-05-31') }
    ], { session: session });
  }).
  then(() => Event.aggregate([
    {
      $group: {
        _id: {
          month: { $month: '$createdAt' },
          year: { $year: '$createdAt' }
        },
        count: { $sum: 1 }
      }
    },
    { $sort: { count: -1, '_id.year': -1, '_id.month': -1 } }
  ]).session(session)).
  then(res => assert.deepEqual(res, [
    { _id: { month: 6, year: 2018 }, count: 2 },
    { _id: { month: 6, year: 2017 }, count: 1 },
    { _id: { month: 5, year: 2017 }, count: 1 }
  ])).
  then(() => session.commitTransaction()).
  then(() => session.endSession());
_

Pengguna tingkat lanjut yang menginginkan kontrol yang lebih baik saat melakukan atau membatalkan transaksi dapat menggunakan

const Event = db.model('Event', new Schema({ createdAt: Date }), 'Event');

let session = null;
return Event.createCollection().
  then(() => db.startSession()).
  then(_session => {
    session = _session;
    session.startTransaction();
    return Event.insertMany([
      { createdAt: new Date('2018-06-01') },
      { createdAt: new Date('2018-06-02') },
      { createdAt: new Date('2017-06-01') },
      { createdAt: new Date('2017-05-31') }
    ], { session: session });
  }).
  then(() => Event.aggregate([
    {
      $group: {
        _id: {
          month: { $month: '$createdAt' },
          year: { $year: '$createdAt' }
        },
        count: { $sum: 1 }
      }
    },
    { $sort: { count: -1, '_id.year': -1, '_id.month': -1 } }
  ]).session(session)).
  then(res => assert.deepEqual(res, [
    { _id: { month: 6, year: 2018 }, count: 2 },
    { _id: { month: 6, year: 2017 }, count: 1 },
    { _id: { month: 5, year: 2017 }, count: 1 }
  ])).
  then(() => session.commitTransaction()).
  then(() => session.endSession());
2 untuk memulai transaksi

Bisakah kita menggunakan transaksi di MongoDB?

Untuk situasi yang membutuhkan atomisitas baca dan tulis ke beberapa dokumen (dalam satu atau beberapa koleksi), MongoDB mendukung transaksi multi-dokumen . Dengan transaksi terdistribusi, transaksi dapat digunakan di beberapa operasi, koleksi, database, dokumen, dan pecahan.

Bagaimana cara menggunakan transaksi di nodejs?

2 Jawaban .
Buat koneksi db
terhubung ke db menggunakan connect
Mulai transaksi menggunakan beginTransaction
mengeksekusi query transaksional
Jika ada kueri yang gagal, gunakan rollback. Ini akan membatalkan transaksi
jika semuanya berjalan dengan baik, gunakan komit
tutup akhir penggunaan koneksi

Bagaimana cara mengambil data tertentu dari MongoDB ke node js?

Untuk memilih data dari koleksi di MongoDB, kita dapat menggunakan metode findOne() . Metode findOne() mengembalikan kemunculan pertama dalam pemilihan. Parameter pertama metode findOne() adalah objek kueri.

Berapa banyak transaksi per detik yang dapat ditangani oleh MongoDB?

Skala Kinerja . MongoDB mendukung 250 juta tick per detik , dengan biaya 40x lebih rendah daripada teknologi lama yang digantikannya.