Heim  >  Fragen und Antworten  >  Hauptteil

Transaktionswert in Mongodb aktualisieren

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粉546257913P粉546257913373 Tage vor577

Antworte allen(1)Ich werde antworten

  • 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": "$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,
            },
        },
    );
    

    Antwort
    0
  • StornierenAntwort