PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Monday, November 7, 2022

[FIXED] How do I use $addToSet with objects in mongodb?

 November 07, 2022     arrays, javascript, mongodb, object, set     No comments   

Issue

I want to push only unique objects into an array with $addToSet.

My userSchema has a field bankDetails which should take an array of objects:

const userSchema = new mongoose.Schema(
  {
    bankDetails: [
      {
        cardHolder: String,
        cardNumber: String,
        expiry: String,
        cvc: String,
        cardBrand: String,
      },
    ]
  }
)

I am updating the schema using the following controller function:

exports.createPayment = async (req, res) => {
  const { user, cardHolder, cardNumber, expiry, cvc, cardBrand } = req.body
  const saveDetails = await User.findByIdAndUpdate(
    { _id: user._id },
    $addToSet: {
      bankDetails: {
        cardHolder,
        cardNumber,
        expiry,
        cvc,
        cardBrand,
      },
    },
    { new: true }
  ).exec();
  res.json(saveDetails);
}

The data is saving correctly but Mongo auto generates an _id field every time so technically none of the objects are unique and the objects are repeatedly added.

Is anyone aware of a workaround for this?


Solution

You could check if a bank already exists, and add it only if not present:

exports.createPayment = async (req, res) => {
  const { user, cardHolder, cardNumber, expiry, cvc, cardBrand } = req.body;
  const existingBank = await User.findOne({
    'bankDetails.cardHolder': cardHolder,
    'bankDetails.cardNumber': cardNumber,
    'bankDetails.expiry': expiry,
    'bankDetails.cvc': cvc,
    'bankDetails.cardBrand': cardBrand,
  });
  if (existingBank) return res.json(existingBank);
  const saveDetails = await User.findByIdAndUpdate(
    user._id,
    {
      $addToSet: {
        bankDetails: {
          cardHolder,
          cardNumber,
          expiry,
          cvc,
          cardBrand,
        },
      },
    },
    { new: true }
  ).exec();
  res.json(saveDetails);
};


Answered By - lpizzinidev
Answer Checked By - David Marino (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing