node.js - nodejs+express+mongodb自定义_id自增怎么写?
本文介绍了node.js - nodejs+express+mongodb自定义_id自增怎么写?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
通过这个教程学习了解到是用.findAndModify()方法可以实现,并且通过命令行操作也实现了,但是在node项目中怎么写呢?
2016.9.8更新------------------------------------------------------------------------------
为什么给movie的id赋值的时候调用newID函数获取不到值呢?执行的时候newID("movieId")总是等于undefind,貌似在数据库查询没有返回的时候下面的JS就执行了。如果不用函数,直接把else部分写在.findAndModify()的callback里就能正常获取到值。
如果一定要用下面这种写法,newID("movieId")怎么才能获取到值呢?
function newID(indexName){
Counter.findAndModify(
{_id: indexName },
[],
{$inc:{count:1}},
{new:true},
function (err,obj) {
console.log(obj)
可以获取到obj.value.count,怎么写才能返回到外部函数?
}
怎么写能返回给函数?
}
app.post('/admin/movie/new',function (req, res) {
略...
if(id !== 'undefined'){
略...
}else{
_movie = new Movie({
_id:newID("movieId"),
title:movieObj.title,
doctor: movieObj.doctor,
country: movieObj.country,
year:movieObj.year,
poster:movieObj.poster,
language:movieObj.language,
flash:movieObj.flash,
summary:movieObj.summary
})
_movie.save(function (err, movie) {
if(err){
console.log(err)
}
res.redirect('/movie/'+ movie._id)
})
);
}
});
解决方案
我想先问一下你说的自增是一定要1,2,3,4……这样吗?因为默认的ObjectID
实际上也是自增的。使用数字序列有其局限性,我在这个问题里解释过为什么。
官方文档也有关于这个问题的说明。
你的问题不在于驱动本身怎么用,在于事件驱动的理解不正确。
function newID(indexName, callback) {
Counter.findAndModify({
_id: indexName
}, [], {
$inc: {
count: 1
}
}, {
new: true
},
function(err, obj) {
// 错误处理略
console.log(obj)
callback(obj.value.count);
}
}
}
app.post('/admin/movie/new', function(req, res) {
// 略...
if (id !== 'undefined') {
// 略...
} else {
newID("movieId", function(id) {
_movie = new Movie({
_id: id,
title: movieObj.title,
doctor: movieObj.doctor,
country: movieObj.country,
year: movieObj.year,
poster: movieObj.poster,
language: movieObj.language,
flash: movieObj.flash,
summary: movieObj.summary
});
_movie.save(function(err, movie) {
if (err) {
console.log(err)
}
res.redirect('/movie/' + movie._id);
});
});
}
});
这篇关于node.js - nodejs+express+mongodb自定义_id自增怎么写?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文