从官方mongoose v3.8.7的手册中看到关于Schema的_id属性,发现这个属性在new一个模型的时候就已经生成了,这个时候根本就没有和MongoDB通信!
我好奇mongoose是如何生成这个_id的值的,它能保证唯一性么?
另外,官方提到可以关闭这个特性,但是
var schema = new Schema({ name: String }, { _id: false });
var Page = mongoose.model('Page', schema);
var p = new Page({ name: 'mongodb.org' });
console.log(p); // { name: 'mongodb.org' }
// MongoDB will create the _id when inserted
p.save(function (err) {
if (err) return handleError(err);
Page.findById(p, function (err, doc) {
if (err) return handleError(err);
console.log(doc); // { name: 'mongodb.org', _id: '50341373e894ad16347efe12' }
})
})
实际测试发现根本就不会save成功,会提示:
[Error: document must have an _id before saving]
请问如何关闭_id后实现保存?
각 문서에는 _id가 있어야 하며 반복할 수 없습니다.
이 기능을 끄면 _ID를 직접 만들어야 합니다
그러니 당연히 저장할 수 없습니다.
먼저 _id는 mongodb의 전역적으로 고유한 개체 식별자이므로 중복이 없습니다.
_id 값은 직접 정의할 수도 있습니다. 정의가 추가되지 않으면 시스템은 기본적으로 생성된 12바이트 개체 식별자를 사용합니다.
전문적인 표현은 다음과 같습니다.
4323原则
4자리 Unix 타임스탬프
3자리 기계코드
2자리 프로세스 번호
임의의 숫자로 시작하는 3자리 카운터 코드
Mongod는 위에서 얻은 결과를 바탕으로 ID를 생성합니다! ~