I’m trying to update my document to remove a few fields I am testing onto further on in the frontend, I removed the fields with this:
delete myObject.myField;
Thus when I look at it before my mongoose findByIdAndUpdate it has indeed none of these fields then I’m trying to update like so:
Journee.findByIdAndUpdate(req.params.id, journee, {new: true, overwrite: true, runValidators: true, context: 'query'}, )
.then(() => {
res.status(200).json()
})
.catch(err => {
res.status(400).json({ err })
})
But when I use the overwrite option like so, it triggers my unique validators and returns an error.
I don’t understand how to achieve my goal, it seems to me that mongo is creating a duplicate document and then suppressing the old one or something like this. Instead of just emptying the document and filling it with new data.
Advertisement
Answer
If I have understand well, you want to remove some fields and update the document with the new one.
So I think a better approach is use $unset. Reference here
With $unset you can delete any field from the document.
An example here
With a query like this:
db.collection.update({
"id": 1
},
{
"$unset": {
"field1": "",
"field3": ""
}
})
You can find the document you want (for example using id or whatever you want). And then $unset and delete as fields as you want.
Using mongoose is the same:
var update = await model.updateOne({
"id": 1
},
{
"$unset": {
"field1": "",
"field3": ""
}
})
console.log(update)
Show the output:
{ n: 1, nModified: 1, ok: 1 }