這是我的貓鼬模型
const mongoose = require('mongoose');
const { boolean } = require('webidl-conversions');
const memberSchema = mongoose.Schema({
name:{
type:String,
required:[true,"Please enter Customer Name"]
},
age:{
type:Number,
required:[true,"Please enter your age"]
},
address:{
type:String,
required:[true,"Please enter your Address"]
},
phone:{
type:String,
required:[true,"Please enter your phone number"],
minLength:[10,"Phone number must be 10 digits"],
maxLength:[10,"Phone number must be 10 digits"],
},
avatar:{
public_id:String,
url:String
},
joining:{
type:Date,
default:Date.now
},
status:{
type:Boolean,
default:true,
},
membership:{
user:{
type:mongoose.Schema.ObjectId,
ref:"Member",
},
membershipAmount:{
type:Number,
},
membershipStart:{
type:Date,
},
membershipPeriod:{
type:Number,
},
membershipEnd:{
type:Date,
},
signUpFee:{
type:Number,
default:500
}
},
});
module.exports=mongoose.model("Member",memberSchema);
memberSchema.methods.planValidity=function(){
this.membershipEnd=new Date(this.membershipStart (this.membershipPeriod*24*60*60*1000));
}
現在我想在創建新用戶時在控制器中使用這個方法 planValidity。
exports.addMember = catchAsyncErrors(async(req,res,next)=>{
const member = await Member.create(req.body);
res.status(201).json({
success:true,
member
});
});
如何呼叫該方法以便我的 MembershipStart 和 membersEnd 得到更新。
uj5u.com熱心網友回復:
這樣的事情可能會奏效。
const memberLookup = await Member.findOne({"name":req.body.name});
if (memberLookup != null) {
memberLookup.member.membershipEnd = new Date(memberLookup.member.membershipStart (memberLookup.member.membershipPeriod*24*60*60*1000));
const member = await Member.findOneAndUpdate({"name":req.body.name}, {$set:{"membership.membershipEnd":memberLookup.member.membershipEnd}},{'upsert':true});
}
});
uj5u.com熱心網友回復:
我真的不明白你遇到了什么問題。
你需要修正你的
planValidity方法。兩者membershipEnd都membershipPeriod屬于membership財產。
memberSchema.methods.planValidity=function(){this.membershipEnd=new Date(this.membershipStart (this.membershipPeriod2460601000));}修復方法后,您可以將其作為普通函式呼叫:
const mem = new Member({
...
membership: {
membershipStart: new Date(),
membershipPeriod: 1,
},
});
mem.planValidity();
mem.save();
uj5u.com熱心網友回復:
如果在創建 Member 時初始化了屬性,那么可以使用 mongoosemembershipStart來更新屬性。membershipPeriodprehook(save)membershipEnd
貓鼬中間件檔案鏈接:https ://mongoosejs.com/docs/middleware.html#pre
memberSchema.pre('save', function() {
this.membership.membershipEnd = new Date(this.membership.membershipStart (this.membership.membershipPeriod * 24 * 60 * 60 * 1000));
});
注意:所有 mongoose 檔案實體方法必須在模型創建之前定義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/463007.html
上一篇:貓鼬增量,或設定為最大值
下一篇:VS終端只輸出兩個目錄?
