1

在 mongodb 中,我们可以将自己的值分配给 _id 字段,并且“_id”字段值可以是数组以外的任何类型,只要它是唯一的——来自docs

但是在我的实时数据库中,我可以看到一些记录重复如下,

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" }

以下是我的 live memberrecords 表的索引(供您参考),

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
        }
]

注意:我有这个表的两个分片。

请对此有任何建议,

4

1 回答 1

1

您的分片键是 _id 字段吗?您只能在集群中强制执行一个唯一索引:分片键(否则服务器必须在每次插入时检查每个分片)。

所以:在单个分片上,_id 将是唯一的。但是,如果它不是您的分片键,那么所有的赌注都会跨多个分片。

请参阅http://www.mongodb.org/display/DOCS/Sharding+Limits#ShardingLimits-UniqueIndexesDOCS%3AIndexes%23UniqueIndexes

于 2012-03-14T14:45:21.107 回答