mongoose的Schema能不能设自id自增长int类型?
发布于 11 年前 作者 Crny 12353 次浏览 最后一次编辑是 8 年前

如果有像cnodejs的models怎样修改呢?

2 回复

默认自带的_id 是保证唯一的,虽然不是自增。

可以 首先:建立一个存放自增长ID的model var mongoose = require(‘mongoose’) ,Schema = mongoose.Schema;

var KeysSchema = new Schema({ _id: {type: String ,index: true}, //实例应该是你的其它model的名字 key: {type: Number,default: 0} //每次使用时的自增长ID });

mongoose.model(‘Keys’,KeysSchema);

以下是每次想生成自增长的ID时。调用的方法,keyId就是存放在KeysScheam中的_id值,如果你有三个model那么 _id可能是:personAutoId,replyAutoId,msgAutoId,用这三个关键字来存储每个model的名字 key默认从0开始,当然你也可以设置为从1000开始,当call下面这个方法后,如果从来没有为任何一个model生成过自增长的ID,那就是默认返回的0,如果以前自增长过,那就会:$inc这个Number类型的key。

以此来实现自增长ID,即:先保存自增长ID的model名字,然后再$inc

var addAndUpdateKeys = exports.addAndUpdateKeys = function(keyId,callback){ Keys.findById(keyId,function(err,doc){ if(!err && !doc){ var obj = {}; obj._id = keyId; var keys = new Keys(obj); keys.save(function(err,doc){ if(err){ callback(null); return; } callback(doc); }) }else{ Keys.findByIdAndUpdate(keyId,{$inc:{key: 1}}, function(err,doc){ if(err){ callback(null); return; } callback(doc); }) } }); };

回到顶部