MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Transaksi Mongo DB 4.0 Dengan Mongoose &NodeJs, Express

dengan luwak di Node.js, adakah yang bisa memberi tahu saya bagaimana kode di atas diimplementasikan kembali menggunakan fitur Transaksi terbaru

Untuk menggunakan dukungan transaksi multi-dokumen MongoDB di luwak, Anda memerlukan versi yang lebih besar dari v5.2. Misalnya:

npm install [email protected]

Metode transaksi luwak mengembalikan janji daripada sesi yang harus menggunakan await . Lihat:

  • Transaksi di Luwak
  • Blog:Perspektif Node.JS tentang MongoDB 4.0:Transaksi

Misalnya, mengubah contoh pada sumber daya di atas dan contoh Anda, Anda dapat mencoba:

const User = mongoose.model('Users', new mongoose.Schema({
  userId: String, wallet: Number
}));
const Transaction = mongoose.model('Transactions', new mongoose.Schema({
  userId: ObjectId, amount: Number, type: String
}));

await updateWallet(userId, 500);

async function updateWallet(userId, amount) {
  const session = await User.startSession();
  session.startTransaction();
  try {
    const opts = { session };
    const A = await User.findOneAndUpdate(
                    { _id: userId }, { $inc: { wallet: amount } }, opts);

    const B = await Transaction(
                    { usersId: userId, amount: amount, type: "credit" })
                    .save(opts);

    await session.commitTransaction();
    session.endSession();
    return true;
  } catch (error) {
    // If an error occurred, abort the whole transaction and
    // undo any changes that might have happened
    await session.abortTransaction();
    session.endSession();
    throw error; 
  }
}

tidak atomik selalu ada kemungkinan dompet pengguna diperbarui dengan jumlah tetapi transaksi terkait tidak dibuat dalam pengumpulan transaksi yang mengakibatkan kerugian finansial

Anda juga harus mempertimbangkan untuk mengubah model data MongoDB Anda. Apalagi jika kedua koleksi tersebut terhubung secara alami. Lihat juga Model data untuk Operasi Atom untuk informasi lebih lanjut.

Contoh model yang bisa Anda coba adalah model Event Sourcing. Buat entri transaksi terlebih dahulu sebagai peristiwa, lalu hitung ulang saldo dompet pengguna menggunakan agregasi.

Misalnya:

{tranId: 1001, fromUser:800, toUser:99, amount:300, time: Date(..)}
{tranId: 1002, fromUser:77, toUser:99, amount:100, time: Date(..)}

Kemudian perkenalkan proses untuk menghitung jumlah untuk setiap pengguna per periode sebagai cache tergantung pada persyaratan (yaitu per 6 jam). Anda dapat menampilkan saldo dompet pengguna saat ini dengan menambahkan:

  • Jumlah terakhir yang di-cache untuk pengguna
  • Setiap transaksi untuk pengguna terjadi sejak jumlah cache terakhir. yaitu 0-6 jam yang lalu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana saya bisa menggunakan Python untuk mengubah bsondump MongoDB menjadi JSON?

  2. Hapus semua bidang yang null

  3. Populasi luwak vs objek bersarang

  4. Java, MongoDB:Bagaimana cara memperbarui setiap objek sambil mengulangi koleksi besar?

  5. Banyak koneksi luwak