mongoose中自建的_id是怎么生成的?

从官方mongoosev3.8.7的手册中看到关于Schema的_id属性,发现这个属性在new一个模型的时候就已经生成了,这个时候根本就没有和MongoDB通信!
我好奇mongoose是如何生成这个_id的值的,它能保证唯一性么?
另外,官方提到可以关闭这个特性,但是
varschema=newSchema({name:String},{_id:false});
varPage=mongoose.model('Page',schema);
varp=newPage({name:'mongodb.org'});
console.log(p);//{name:'mongodb.org'}
//MongoDBwillcreatethe_idwheninserted
p.save(function(err){
if(err)returnhandleError(err);
Page.findById(p,function(err,doc){
if(err)returnhandleError(err);
console.log(doc);//{name:'mongodb.org',_id:'50341373e894ad16347efe12'}
})
})
实际测试发现根本就不会save成功,会提示:
[Error:documentmusthavean_idbeforesaving]
请问如何关闭_id后实现保存?
炎炎设计
浏览 341回答 2
2回答

隔江千里

每个document都必须有一个_id而且不能重复.你关掉这个特性你就得自己制造一个_ID所以,你当然保存不了.

青春有我

首先,_id是mongodb全局唯一到对象标识符,不会有重复的。_id的值也可以自己定义,如果没有定义添加的话,系统就会使用默认生成的12个字节构成的对象标识
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript