搜尋

首頁  >  問答  >  主體

更新 mongodb 中的交易值

我正在製作一個 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....

P粉546257913P粉546257913470 天前669

全部回覆(1)我來回復

  • P粉797004644

    P粉7970046442023-09-14 13:59:00

    要套用$inc 運算子位於陣列的元素處。我們應該使用 點符號 來指定 在嵌入文件或陣列中,

    位置 $< /a>

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

    mongoplayground

    ##輸入:

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

    輸出:

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

    更新

    使用特定陣列索引更新陣列元素:

    const idx = 1;
    db.users.updateOne(
        {
            email: 'abc@123.com'
        },
        {
            $inc: {
                [`Wallets.${idx}.amount`]: -50,
            },
        },
    );
    

    回覆
    0
  • 取消回覆