wongx
wongx

Reputation: 12267

Mongoose: findByIdAndUpdate() How To Conditionally Update Based On Existing Data?

When using findByIdAndUpdate() or findOneAndUpdate() (that is, updating the database atomically to avoid race conditions), is there a way to reference the existing data to conditionally update a field?

PersonModel.findByIdAndUpdate(
  req.user.id, 
  {
    $set: { 
      // set this to true 
      // if person.color === blue for example
      hasFavoriteColor: true, 
    }
  },
  { new: true },
  (err, updatedDoc => {
    if (err) return;
    return updatedDoc;
  });
);

Upvotes: 1

Views: 2034

Answers (1)

Đăng Khoa Đinh
Đăng Khoa Đinh

Reputation: 5411

I'm not sure you can do that, I see nowhere in the document. However, for your query particularly, you can add the condition about the color in the filter part, something like this :

PersonModel.findOneAndUpdate(
  {_id : req.user.id, color : "blue"},
  {
    $set: { 
      // set this to true 
      // if person.color === blue for example
      hasFavoriteColor: true, 
    }
  },
  { new: true },
  (err, updatedDoc => {
    if (err) return;
    return updatedDoc;
  });
);

Upvotes: 1

Related Questions