Maison > Questions et réponses > le corps du texte
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粉7970046442023-09-14 13:59:00
Pour appliquer $inc code>
运算符位于数组的元素处。我们应该使用 点符号 来指定
dans un document ou un tableau intégré,
db.collection.update({ email: "abc@123.com", "Wallets.name": "paytm" }, { "$inc": { "Wallets.$.amount": -50 } })
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, }, }, );