在 mongodb 中,几乎每个文档(除了某些系统的 Collection 或者某些Capped Collection)都要求有一个主键:_id,用来唯一标识他们,通常—它的值就是 ObjectId 类型。当用户往文档中插入一条新记录的时候,如果没有指定_id 属性,那么 MongoDB 会自动生成一个 ObjectId 类型的值,保存为_id 的值。
_id 的值可以为任何类型,除了数组,在实际应用中,鼓励用户自己定义_id 值,但是要保证它的唯一性。如下有两个方案:
Sequence Numbers:序列号
传统的数据库中,通常用一个递增的序列来提供主键,在 MongoDB
中用 ObjectId 的来代替,我们可以通过如下的函数来获取主键:
function counter(name) {
var ret = db.counters.findAndModify({query:{_id:name},
update:{$inc : {next:1}}, "new":true, upsert:true});
return ret.next;
}
db.users.insert({_id:counter("users"), name:"Robin Wen"}) // _id : 1
db.users.insert({_id:counter("users"), name:"Peter Chan"}) // _id :2
利用 UUID
如果用 UUID 来提供主键,我们的应用需要自己去生成 UUID,考虑到效率,建议把 UUID 保存为 BSON BinData 类型,如果用例中对效率要求不是很高,也可以保存为字符串类型。
该贴被Robin编辑于2014-8-10 15:06:30该贴由hui.chen转至本版2014-11-5 16:18:26
该贴由hui.chen转至本版2014-11-5 16:22:21