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....
要应用
在嵌入文档或数组中,
$inc code>
运算符位于数组的元素处。我们应该使用 点符号 来指定位置 $
mongoplayground
输入:
输出:
更新
使用特定数组索引更新数组元素: