具有参考值的 MongooseJS 预保存挂钩
MongooseJS Pre Save Hook with Ref Value
我想知道是否可以在 MongooseJS 的预保存挂钩中获取架构字段的填充引用值?
我正在尝试从 ref 字段中获取一个值,我需要 ref 字段(下面,即 User 字段),以便我可以从中获取时区。
架构:
var TopicSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Topic name',
trim: true
},
user: {
type: Schema.ObjectId,
ref: 'User'
},
nextNotificationDate: {
type: Date
},
timeOfDay: { // Time of day in seconds starting from 12:00:00 in UTC. 8pm UTC would be 72,000
type: Number,
default: 72000, // 8pm
required: 'Please fill in the reminder time'
}
});
预保存挂钩:
/**
* Hook a pre save method to set the notifications
*/
TopicSchema.pre('save', function(next) {
var usersTime = moment().tz(this.user.timezone).hours(0).minutes(0).seconds(0).milliseconds(0); // Reset the time to midnight
var nextNotifyDate = usersTime.add(1, 'days').seconds(this.timeOfDay); // Add a day and set the reminder
this.nextNotificationDate = nextNotifyDate.utc();
next();
});
在上面的保存挂钩中,我试图访问 this.user.timezone
但该字段未定义,因为 this.user
仅包含一个 ObjectID。
如何让这个字段完全填充以便我可以在预保存挂钩中使用它?
谢谢
您需要再做一次查询,但这并不难。 Population 仅适用于查询,我不相信这种情况下有方便的钩子。
var User = mongoose.model('User');
TopicSchema.pre('save', function(next) {
var self = this;
User.findById( self.user, function (err, user) {
if (err) // Do something
var usersTime = moment().tz(user.timezone).hours(0).minutes(0).seconds(0).milliseconds(0); // Reset the time to midnight
var nextNotifyDate = usersTime.add(1, 'days').seconds(self.timeOfDay); // Add a day and set the reminder
self.nextNotificationDate = nextNotifyDate.utc();
next();
});
});
我想知道是否可以在 MongooseJS 的预保存挂钩中获取架构字段的填充引用值?
我正在尝试从 ref 字段中获取一个值,我需要 ref 字段(下面,即 User 字段),以便我可以从中获取时区。
架构:
var TopicSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Topic name',
trim: true
},
user: {
type: Schema.ObjectId,
ref: 'User'
},
nextNotificationDate: {
type: Date
},
timeOfDay: { // Time of day in seconds starting from 12:00:00 in UTC. 8pm UTC would be 72,000
type: Number,
default: 72000, // 8pm
required: 'Please fill in the reminder time'
}
});
预保存挂钩:
/**
* Hook a pre save method to set the notifications
*/
TopicSchema.pre('save', function(next) {
var usersTime = moment().tz(this.user.timezone).hours(0).minutes(0).seconds(0).milliseconds(0); // Reset the time to midnight
var nextNotifyDate = usersTime.add(1, 'days').seconds(this.timeOfDay); // Add a day and set the reminder
this.nextNotificationDate = nextNotifyDate.utc();
next();
});
在上面的保存挂钩中,我试图访问 this.user.timezone
但该字段未定义,因为 this.user
仅包含一个 ObjectID。
如何让这个字段完全填充以便我可以在预保存挂钩中使用它?
谢谢
您需要再做一次查询,但这并不难。 Population 仅适用于查询,我不相信这种情况下有方便的钩子。
var User = mongoose.model('User');
TopicSchema.pre('save', function(next) {
var self = this;
User.findById( self.user, function (err, user) {
if (err) // Do something
var usersTime = moment().tz(user.timezone).hours(0).minutes(0).seconds(0).milliseconds(0); // Reset the time to midnight
var nextNotifyDate = usersTime.add(1, 'days').seconds(self.timeOfDay); // Add a day and set the reminder
self.nextNotificationDate = nextNotifyDate.utc();
next();
});
});