Không thể xóa trường khỏi đối tượng được trả về bởi mongoose Model.create

Souleiman

New Member
#1
Mình đang sử dụng Mongoose với NodeJS. Khi mình tạo một instance mới của một Model (gọi là Expression), nó thêm đối tượng vào cơ sở dữ liệu và trả về cho mình một đối tượng của model mới được tạo ra.

Tuy nhiên .. Mình không thể xóa một trường từ đối tượng json này.
Mã:
var savedExpr = await Expression.create(expr);
delete savedExpr["__v"]
return savedExpr;
Code này chỉ trả về bản gốc savedExpr với trường __v được bao gồm.

Cảm ơn các bạn.
 

Admin

Administrator
Thành viên BQT
#2
Bạn không thể xóa một số thuộc tính này vì chúng đã được định nghĩa là "non-configurable".
Mã:
 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;
Ngoài ra một điều thú vị, thuộc tính __v được đặt thành true theo mặc định, bạn có thể vô hiệu hóa các thuộc tính __v trong định nghĩa của Schema bằng cách đặt tùy chọn versionKey thành false. Ví dụ:
Mã:
var expressionSchema = new Schema({ ... attributes ... }, { versionKey: false });
 
OP
OP
S

Souleiman

New Member
#3
Mình đã nhầm lẫn vì [typeof savedExpr] chỉ trả về [object] ... không nhận ra toObject là cần thiết! Mình cũng đã nghĩ đến việc tắt versionKey, nhưng quyết định để nó an toàn. Cảm ơn bạn đã trả lời chi tiết
 

Từ khóa phổ biến

You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.

Top