How to exclude fields on return in mongoose

Tags: , , ,



I have the following code:

Post.create(req.body)
.then(post => res.status(201).json(post))
.catch(err => res.status(500).json(err))

It works perfectly but say I want to exclude a field returned, like the __v field. I know I can do this by just creating an object like

{
  title: post.title,
  description: post.description
}

and etc. for teh other fields, however if I have 20 fields I don’t want to list every single one, so is there a way for mongoose to exclude a field when it returns after it’s created.

Answer

const obj = { a: 1, b: 2, c: 3, d: 4 };
(({ b, c, ...o }) => o)(obj)
// returns { a: 1, d: 4 }

So, where b and c are the keys of the key/value pairs you want left out:

Post.create(req.body)
  .then(post => res.status(201).json((({ b, c, ...o }) => o)(post)))
  .catch(err => res.status(500).json(err))

You might have to check the brackets there but I think that’s right.



Source: stackoverflow