recherche

Maison  >  Questions et réponses  >  le corps du texte

Mettre à jour la valeur de la transaction dans MongoDB

Je réalise un projet Mern et je dois mettre à jour deux champs dans un enregistrement mongo db.

J'ai deux champs, l'un est un tableau d'objets appelés portefeuilles et l'autre est des transactions.

Je reçois un objet du frontend qui inclut le montant, l'index du portefeuille où la transaction a été effectuée, car les portefeuilles sont des tableaux d'objets en mongo.

Maintenant, je dois soustraire le montant de la transaction du portefeuille. Comment faire cela J'ai écrit un contrôleur dans node.js mais il ne fait rien.

L'objet que je reçois du frontend si..

transaction = { amount: '50', wallet: 0, type: 'expense', description: 'kmop' };

Mon contrôleur Node js est...

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 });
  }
};

Enregistrements de ma base de données 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}]

Supposons que j'ai effectué une transaction de 50 roupies à partir du portefeuille namde paytm, donc ce que je veux, c'est Le montant dans l'objet portant le nom paytm doit être réduit de rs-50 donc initialement c'est Après traitement, rs500 devrait devenir rs450....

P粉546257913P粉546257913426 Il y a quelques jours624

répondre à tous(1)je répondrai

  • P粉797004644

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

    Pour appliquer $inc 运算符位于数组的元素处。我们应该使用 点符号 来指定 dans un document ou un tableau intégré,

    Emplacement $< /a>

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

    mongoplayground

    Entrez :

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

    Sortie :

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

    Mise à jour

    Mettre à jour un élément du tableau à l'aide d'un index de tableau spécifique :

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

    répondre
    0
  • Annulerrépondre