从官方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后实现保存?
Setiap dokumen mesti mempunyai _id dan ia tidak boleh diulang.
Jika anda mematikan ciri ini, anda perlu membuat _ID sendiri
Jadi, sudah tentu anda tidak boleh menyimpannya.
Pertama sekali, _id ialah pengecam objek unik secara global dalam mongodb dan tidak akan ada pendua.
.Nilai _id juga boleh ditakrifkan sendiri Jika tiada definisi ditambahkan, sistem akan menggunakan pengecam objek 12-bait yang dijana secara lalai
Percakapan profesional, ia sepatutnya:
4323原则
4 digit cap waktu Unix
Kod mesin 3 digit
nombor proses 2 digit
Kod kaunter 3 digit, bermula daripada nombor rawak
Mongod akan menjana ID berdasarkan keputusan yang diperolehi di atas! ~