Mettre à jour la valeur de la transaction dans MongoDB
P粉546257913
P粉546257913 2023-09-13 19:30:49
0
1
493

Je réalise un projet Mern et je dois mettre à jour deux champs dans un enregistrement mongo db.

J'ai deux champs, l'un est un tableau d'objets appelés portefeuilles et l'autre est des transactions.

Je reçois un objet du frontend qui inclut le montant, l'index du portefeuille où la transaction a été effectuée, car les portefeuilles sont des tableaux d'objets en mongo.

Maintenant, je dois soustraire le montant de la transaction du portefeuille. Comment faire cela J'ai écrit un contrôleur dans node.js mais il ne fait rien.

L'objet que je reçois du frontend si..

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

Mon contrôleur Node js est...

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

Enregistrements de ma base de données Mongo--

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

Supposons que j'ai effectué une transaction de 50 roupies à partir du portefeuille namde paytm, donc ce que je veux, c'est Le montant dans l'objet portant le nom paytm doit être réduit de rs-50 donc initialement c'est Après traitement, rs500 devrait devenir rs450....

P粉546257913
P粉546257913

répondre à tous (1)
P粉797004644

Pour appliquer$inc code>运算符位于数组的元素处。我们应该使用点符号来指定 dans un document ou un tableau intégré,

Emplacement $

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

mongoplayground

Entrez :

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

Sortie :

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

Mise à jour

Mettre à jour un élément du tableau à l'aide d'un index de tableau spécifique :

const idx = 1; db.users.updateOne( { email: 'abc@123.com' }, { $inc: { [`Wallets.${idx}.amount`]: -50, }, }, );
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!