Update transaction value in mongodb
P粉546257913
P粉546257913 2023-09-13 19:30:49
0
1
520

I'm making a Mern project and I need to update two fields in a mongo db record.

I have two fields, one is an array of objects called wallets and the other is transactions.

I get an object from the frontend that includes the amount, index of the wallet where the transaction was made, because wallets are arrays of objects in mongo.

Now I need to subtract the transaction amount from the wallet. How to do this I have written a controller in node.js but it is not doing anything.

The object I receive from the front end if..

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

My Node js controller is...

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 }); } };

My mongo database records--

{"_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}]

Suppose I made a transaction of 50 rupees from namde paytm wallet, so what I want is The amount in the object with name paytm should be reduced by rs-50 so initially it is After processing, rs500 should become rs450....

P粉546257913
P粉546257913

reply all (1)
P粉797004644

To apply the$inc code>operator at the element of the array. We should usedot notationto specify In embedded documents or arrays,

Location $

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

mongoplayground

enter:

[ { "_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 } ] } ]

Output:

[ { "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" } ]

renew

Update an array element using a specific array index:

const idx = 1; db.users.updateOne( { email: 'abc@123.com' }, { $inc: { [`Wallets.${idx}.amount`]: -50, }, }, );
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!