0
我正在尝试实现递增计数器。我将这个数字存储在'projects'集合中,并尝试在'issues'集合中插入新文档时检索并加1。Mongoose预钩或方法不能与findOneAndUpdate方法一起使用
我已经尝试了这种方法,并没有取得成功。我可以简单地通过获取数字并将其递增1并通过表单提交发送它,但之后我不会学习。从我看到的其他一些答案来看,问题似乎是中间件不知道findOneAndUpdate查询操作中的文档。
这是第一次.pre操作,我尝试没有成功。
.pre('save', function(next) {
counter = Project.findOneAndUpdate({_id: this.project}, {$inc: { numberSeq: 1} });
console.log(counter);
this.number = counter.numberSeq;
next();
});
接下来,我给了这个尝试。除了文档更新之外,一切似乎都从控制台输出中起作用。
.pre('save', function(next){
console.log('attempting to get next num ');
Project.findOneAndUpdate({_id: this.project}, {$inc: { numberSeq: 1} }, function(error, counter) {
console.log('project is ' + counter.project);
console.log('number seq is ' + counter.numberSeq);
this.number = counter.numberSeq;
console.log('next num sequence is: ' + this.number);
next();
});
});
最后,这里是我尝试使用的方法。
IssueSchema.methods.getNextNumber = function(project) {
Project.findOneAndUpdate({_id: project}, {$inc: { numberSeq: 1} }, function(error, counter) {
if(error) {
return error;
}
console.log(counter.numberSeq);
return counter.numberSeq;
});
};
这样使用。它几乎可以工作,但更新似乎在方法传递下一个数字之前完成,数字最终未定义。我尝试了几种方法使其同步,但无济于事
var issue = new Issues({
title: req.body.title,
description: req.body.description,
fields: req.body.fields,
project: req.body.project,
created_by: req.user || req.body.created_by,
type: req.body.type,
});
issue.number = issue.getNextNumber();
issue.save(function(err, result) {
if (err) {
return res.status(409).send({message: 'There was an error creating the issue: ' + err});
}
console.log(result);
res.send({message: 'New issue created', result: result});
});
});