Node.js 这个预钩子保存是如何工作的?
我一直在尝试在mongoose中使用populate,我目前的想法是检查MongoDB中是否存在特定的文档,如果存在,则预保存钩子应该检查,而不是创建一个新文档,它应该将其推送到refs,以便我以后可以填充 现在,ref被保存在MongoDB中,但是,如何检查我试图保存的文档是否在mongo中的pre-save中(或任何其他更合适的方法) 这是模式Node.js 这个预钩子保存是如何工作的?,node.js,mongodb,Node.js,Mongodb,我一直在尝试在mongoose中使用populate,我目前的想法是检查MongoDB中是否存在特定的文档,如果存在,则预保存钩子应该检查,而不是创建一个新文档,它应该将其推送到refs,以便我以后可以填充 现在,ref被保存在MongoDB中,但是,如何检查我试图保存的文档是否在mongo中的pre-save中(或任何其他更合适的方法) 这是模式 var Userschmea = new mongoose.Schema({ user:String, posts:[{ type
var Userschmea = new mongoose.Schema({
user:String,
posts:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Post'
}]
})
var PostSchema = new mongoose.Schema({
content:String,
author:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Author'
}]
})
Userschmea.pre('save',(next)=>{
//what to do here
next()
})
var Post = mongoose.model('Post',PostSchema);
var User = mongoose.model('User',Userschmea);
这是我试图保存的端点:
app.post('/save/user',(req,res)=>{
console.log(req.body);
//Can i access this in my pre-save
const newUser = new User({
user: req.body.user
})
newUser.save((err)=>{
const newPost = new Post({
content:req.body.content,
author: newUser._id
})
newPost.save((err)=> {
if(err) {
return res.send(err);
}
})
if(err){
console.log(err);
return res.send(err);
}
})
return res.send(req.body.user);
})
您可以使用带有某个唯一键的
findOne
方法来检查用户是否存在。我在这里使用了电子邮件
Userschmea.pre('save',(next)=>{
var self=这个;
Userschmea.findOne({email:this.email},'email',函数(err,results){
如果(错误){
下一个(错误);
}如果有的话(结果){
自我失效(“用户”,“用户存在”);
下一步(新错误(“用户已存在”);
}否则{
next();
}
});
})
这个“this”是空的,在这种情况下,不要使用箭头函数,函数(next){
而不是(next)=>{
@alpitand,同意上面的评论。请找到更新的答案。还有一件事,如果它不在那里,我需要保存它,如果它在那里,我需要推送一些值。如果找不到文档,预保存将按照当前实现保存文档。第二种情况是如果你想推送一些值,如果文档存在,那么你可以处理它的副捕获异常,它将在预钩子时抛出。或者您可以使用findOneAndUpdate预钩子。