在mongodb中插入重复的值“_id”;领域


Duplicate value inserted in the mongodb "_id" field

在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。