0

I'm using Mongoose with NodeJS. When I create new instance of a Model (called Expression), it adds the object to the database and returns me an object of the newly created model.

However.. I am unable to delete a field from this json object.

var savedExpr = await Expression.create(expr);
delete savedExpr["__v"]
return savedExpr;

This code merely returns the original savedExpr with the __v field included. Any ideas?

Thank you.

Souleiman
  • 3,360
  • 4
  • 23
  • 21

1 Answers1

3

You can't delete some of these properties because they have been defined as "non-configurable".

 var savedExpr = await Expression.create(expr);
 var savedExprCopy = Object.assign({}, savedExpr);
 delete savedExprCopy["__v"];
 return savedExprCopy;

OR

 var savedExpr = await Expression.create(expr);
 savedExpr = savedExpr.toObject();
 delete savedExprCopy["__v"];
 return savedExprCopy;

Also an interesting thing just for knowledge, the __v attribute is set to true by default, you can disable the __v attribute in the Schema's definitions by setting version key option to false. E.g:

var expressionSchema = new Schema({ ... attributes ... }, { versionKey: false }); 
Helping hand
  • 2,800
  • 2
  • 19
  • 31
  • Rats! I was confused because [typeof savedExpr] merely returned [object]... didn't realize toObject was needed! I was thinking of turning off versionKey, but decided to leave it to be safe. Thank you for the detailed answer. – Souleiman Jul 30 '18 at 20:18