在mongodb中,我们可以将自己的值分配给_id字段,"_id"字段值可以是任何类型,而不是数组,只要它是唯一的——来自文档。
但在我的实时数据库中,我可以看到一些记录被复制如下,
db.memberrecords.find().limit(2).forEach(printjson)
{
"_id" : "999783",
"Memberid" : "999783",
"Name" : "ASHEESH SHARMA",
"Gender" : "M",
}
{
"_id" : "999783",
"Memberid" : "999783",
"Name" : "Sanwal Singh Meena",
"Gender" : "M",
}
在上述记录中,相同的_id值在表中插入了两次。当我用本地数据库测试时,它不允许插入相同的_id记录,并抛出如下错误,
E11000 duplicate key error index: mongoms.memberrecords.$_id_ dup key: { : "999783" }
以下是我的实时成员记录表的索引(供您参考),
db.memberrecords.getIndexes()
[
{
"name" : "_id_",
"ns" : "mongoms.memberrecords",
"key" : {
"_id" : 1
},
"v" : 0
},
{
"_id" : ObjectId("4f0bcdf2b1513267f4ac227c"),
"ns" : "mongoms.memberrecords",
"key" : {
"Memberid" : 1
},
"name" : "Memberid_1",
"unique" : true,
"v" : 0
}
]
注意:我有两张桌子的碎片。
请对此提出任何建议,
您的shard键是_id字段吗?在集群中只能强制使用一个唯一的索引:shard键(否则服务器必须在每次插入时检查每个shard)。
因此:在单个碎片上,_id将是唯一的。然而,如果它不是你的碎片密钥,那么多个碎片上的所有赌注都会被取消。
请参阅http://www.mongodb.org/display/DOCS/Sharding+Limits#ShardingLimits UniqueIndexesDOCS%3Indexes%23UniqueIndex。