Heim > Fragen und Antworten > Hauptteil
Ich erstelle ein Mern-Projekt und muss zwei Felder in einem Mongo-DB-Datensatz aktualisieren.
Ich habe zwei Felder, eines ist ein Array von Objekten namens Wallets und das andere sind Transaktionen.
Ich erhalte ein Objekt vom Frontend, das den Betrag und den Index der Wallet enthält, in der die Transaktion durchgeführt wurde, da Wallets in Mongo Arrays von Objekten sind.
Jetzt muss ich den Transaktionsbetrag vom Wallet abziehen. So geht das: Ich habe einen Controller in node.js geschrieben, aber er macht nichts.
Das Objekt, das ich vom Frontend erhalte, wenn..
transaction = { amount: '50', wallet: 0, type: 'expense', description: 'kmop' };
Mein Node-JS-Controller ist...
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 }); } };
Meine Mongo-Datenbankeinträge--
{"_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}]
Angenommen, ich habe eine Transaktion über 50 Rupien über die Geldbörse von namde paytm getätigt, also möchte ich Folgendes Der Betrag im Objekt mit dem Namen paytm sollte zunächst um 50 RS reduziert werden Nach der Verarbeitung sollten aus 500 RS 450 werden....
P粉7970046442023-09-14 13:59:00
要应用$inc code>
运算符位于数组的元素处。我们应该使用 点符号 来指定
在嵌入文档或数组中,
db.collection.update({ email: "abc@123.com", "Wallets.name": "paytm" }, { "$inc": { "Wallets.$.amount": -50 } })
输入:
[ { "_id": "64a5a396ec152ab4f5e1c60c", "firstName": "Vinayak", "lastName": "Pandey", "email": "abc@123.com", "password": "$2b$10$dpAmLPa9imDKn3qeyhZ/hOwolO6NOYVwNvVgBc9PY8XZZ3n4WYh/O", "Wallets": [ { "name": "paytm", "amount": 500 }, { "name": "hdfc", "amount": 5000 }, { "name": "test", "amount": 3020 } ] } ]
输出:
[ { "Wallets": [ { "amount": 450, "name": "paytm" }, { "amount": 5000, "name": "hdfc" }, { "amount": 3020, "name": "test" } ], "_id": "64a5a396ec152ab4f5e1c60c", "email": "abc@123.com", "firstName": "Vinayak", "lastName": "Pandey", "password": "$2b$10$dpAmLPa9imDKn3qeyhZ/hOwolO6NOYVwNvVgBc9PY8XZZ3n4WYh/O" } ]
更新
使用特定数组索引更新数组元素:
const idx = 1; db.users.updateOne( { email: 'abc@123.com' }, { $inc: { [`Wallets.${idx}.amount`]: -50, }, }, );