10

Mongoose / MongoDbを使用して一意のインデックスを作成する際に問題が発生し、機能させることができません。一意のインデックスを設定すると、同じ属性値を持つ2つのドキュメントを追加できます。

考えられるすべてのことを試しました-再起動(すべて)構文の変更など。

コード

追加>>

これは、エンティティを保存するために使用している方法です。

  create  : function(entity, definition, successFn, errorFn){

    var model = mongoose.model(entity);
    newModel = new model(definition);

    newModel.save(function(error) {
      if(error){
        if(!errorFn){
          throw error;
        }
        errorFn(newModel);
        return;
      }

      successFn(newModel);
    });
  }...

<<

var Something = new Schema({
  objectId          : ObjectId,
  name              : { type : String, index: { unique: true }}, 
  url               : { type : String, index: { unique: true }},
...etc
mongoose.model('Something', Something);

モンゴ出力

 [conn1] insert xxxxx.agencies 1526ms
 [conn1] building new index on { name: 1 } for xxxxx.agencies
 [conn1] insert xxxxx.system.indexes exception 11000 E11000 duplicate key error    index: xxxxx.agencies.$name_1  dup key: { : "something" } 4ms
 [conn1] building new index on { url: 1 } for xxxxx.agencies
 [conn1] insert xxxxx.system.indexes exception 11000 E11000 duplicate key error index: xxxxx.agencies.$url_1  dup key: { : "http://www.something.com" } 1ms

MongoHubにチェックインしたとき、インデックスが表示されないため、作成されたようには見えません。

これはこの質問の複製ですが、私にとって有効な答えはありません。

4

3 に答える 3

8

データベースの消去を伴わない解決策の 1 つは、重複を手動で削除してから、次の行に沿って何かを実行することです。

db.users.ensureIndex({email:1},{unique:true,sparse:true});

モンゴシェルから

于 2012-10-26T02:56:09.610 に答える
5

MongoDB コレクションに既に重複データがあるため、インデックスの作成に失敗しているようです。可能であれば、すべてのデータを削除して、空のコレクションからやり直してください。

于 2011-05-08T19:09:49.103 に答える
3

コレクションに一意のインデックスを適用したいので、重複するドキュメントを削除することをお勧めします。これを行うためのコードは次のとおりです。

Mongo シェル クライアントの場合:

db.agencies.ensureIndex({name: 1}, {unique: true, dropDups: true});
db.agencies.ensureIndex({url: 1}, {unique: true, dropDups: true});
于 2013-11-07T09:51:42.517 に答える