我正在製作一個 Mern 項目,我需要更新 mongo db 記錄中的兩個欄位。
我有兩個字段,一個是名為錢包的物件數組,另一個是交易。
我從前端獲取一個對象,其中包括進行交易的錢包的金額、索引,因為錢包是 mongo 中的對象數組。
現在我需要從錢包中減去交易金額。如何做到這一點我已經在node.js中編寫了一個控制器,但它沒有做任何事情。
我從前端收到的對象,如果..
transaction = { amount: '50', wallet: 0, type: 'expense', description: 'kmop' };
我的 Node js 控制器是...
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 }); } };
我的 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}]
假設我從 namde paytm 錢包進行了一筆 50 盧比的交易,所以我想要的是 名稱為 paytm 的對像中的金額應減少 rs-50,因此最初是 rs500經過處理後應該會變成rs450....
要套用
在嵌入文件或陣列中,
$inc code>
運算子位於陣列的元素處。我們應該使用 點符號 來指定位置 $
mongoplayground
##輸入:
輸出:
更新
使用特定陣列索引更新陣列元素: