1

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 値がテーブルに 2 回挿入されています。ローカル データベースでテストしたところ、同じ _id レコードを挿入できず、次のようにエラーがスローされました。

E11000 duplicate key error index: mongoms.memberrecords.$_id_  dup key: { : "999783" }

以下は、私のライブ 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
        }
]

注: このテーブルには 2 つのシャーディングがあります。

これに関する提案があれば、

4

1 に答える 1

1

シャード キーは _id フィールドですか? クラスター全体で適用できる一意のインデックスは 1 つだけです: シャード キー (そうしないと、サーバーはすべての挿入ですべてのシャードをチェックする必要があります)。

したがって、単一のシャードでは、_id は一意になります。ただし、それが自分のシャード キーでない場合、すべての賭けは複数のシャードにまたがってオフになります。

http://www.mongodb.org/display/DOCS/Sharding+Limits#ShardingLimits-UniqueIndexesDOCS%3AIndexes%23UniqueIndexesを参照してください。

于 2012-03-14T14:45:21.107 に答える