How can I update a MongoDB document with Mongoose when only a subset of its fields are specified? (i.e. update the specified fields, but leave any other existing fields
You can create a helper method like this:
const filterObj = (obj, ...allowedFields) => {
const newObj = {};
Object.keys(obj).forEach(el => {
if (allowedFields.includes(el) && (typeof obj[el] === "boolean" || obj[el]))
newObj[el] = obj[el];
});
return newObj;
};
And use it like this:
let filteredBody = filterObj(req.body, "email", "firstname", "lastname");
filteredBody.updatedAt = Date.now();
// Update the user object in the db
const userUpdated = await User.findByIdAndUpdate(userId, filteredBody, {
new: true,
runValidators: true
});