Kemas kini nilai transaksi dalam mongodb
P粉546257913
P粉546257913 2023-09-13 19:30:49
0
1
640

Saya sedang membuat projek Mern dan saya perlu mengemas kini dua medan dalam rekod mongo db.

Saya mempunyai dua medan, satu ialah susunan objek yang dipanggil dompet dan satu lagi adalah transaksi.

Saya mendapat objek daripada bahagian hadapan yang merangkumi jumlah, indeks dompet tempat urus niaga dibuat, kerana dompet ialah susunan objek dalam mongo.

Sekarang saya perlu menolak jumlah transaksi daripada dompet. Bagaimana untuk melakukan ini saya telah menulis pengawal dalam node.js tetapi ia tidak melakukan apa-apa.

Objek yang saya terima dari bahagian hadapan jika..

transaction = { amount: '50', wallet: 0, type: 'expense', description: 'kmop' };

Pengawal Node js saya ialah...

module.exports.addTransaction = async (req, res) => {
  const transaction = req.body;
  const {wallet} = transaction;

  try {
      const walletName = `Wallets.${wallet}.amount`
      await UserModel.findOneAndUpdate(
        { email: email },
        {  $inc: { walletName : -transaction.amount}   ,
          $push: { transactions: { $each: [transaction], $position: 0 } } }
      );
      res.send({stat: true});
    } 
    else {
      console.log(data)
      res.send({ stat: false });
    }
  } catch (err) {
    console.log("err",err)
    res.send({ stat: false, err: err.message });
  }
};

Rekod pangkalan data mongo saya--

{"_id":{"$oid":"64a5a396ec152ab4f5e1c60c"},
"firstName":"Vinayak",
"lastName":"Pandey",
"email":"abc@123.com",
"password":"b$dpAmLPa9imDKn3qeyhZ/hOwolO6NOYVwNvVgBc9PY8XZZ3n4WYh/O",
"Wallets":[{"name":"paytm","amount":500},
           {"name":"hdfc","amount":5000},
           {"name":"test","amount":3020}]

Andaikata saya membuat transaksi 50 rupee dari dompet namde paytm, jadi apa yang saya mahu ialah Jumlah dalam objek dengan nama paytm harus dikurangkan sebanyak rs-50 jadi pada mulanya ia Selepas diproses, rs500 sepatutnya menjadi rs450....

P粉546257913
P粉546257913

membalas semua(1)
P粉797004644

Untuk memohon $inc code> 运算符位于数组的元素处。我们应该使用 点符号 来指定 dalam dokumen atau tatasusunan terbenam,

Lokasi $

db.collection.update({
  email: "abc@123.com",
  "Wallets.name": "paytm"
},
{
  "$inc": {
    "Wallets.$.amount": -50
  }
})

mongoplayground

Masukkan:

[
  {
    "_id": "64a5a396ec152ab4f5e1c60c",
    "firstName": "Vinayak",
    "lastName": "Pandey",
    "email": "abc@123.com",
    "password": "b$dpAmLPa9imDKn3qeyhZ/hOwolO6NOYVwNvVgBc9PY8XZZ3n4WYh/O",
    "Wallets": [
      {
        "name": "paytm",
        "amount": 500
      },
      {
        "name": "hdfc",
        "amount": 5000
      },
      {
        "name": "test",
        "amount": 3020
      }
    ]
  }
]

Keluaran:

[
  {
    "Wallets": [
      {
        "amount": 450,
        "name": "paytm"
      },
      {
        "amount": 5000,
        "name": "hdfc"
      },
      {
        "amount": 3020,
        "name": "test"
      }
    ],
    "_id": "64a5a396ec152ab4f5e1c60c",
    "email": "abc@123.com",
    "firstName": "Vinayak",
    "lastName": "Pandey",
    "password": "b$dpAmLPa9imDKn3qeyhZ/hOwolO6NOYVwNvVgBc9PY8XZZ3n4WYh/O"
  }
]

Dikemas kini

Kemas kini elemen tatasusunan menggunakan indeks tatasusunan tertentu:

const idx = 1;
db.users.updateOne(
    {
        email: 'abc@123.com'
    },
    {
        $inc: {
            [`Wallets.${idx}.amount`]: -50,
        },
    },
);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan