2016-09-26 10 views
0

ニックネームなしでドキュメントを2回挿入しようとすると、MongoDBエラーが発生します。文書にはすでに固有のフィールドがあり、必須ではありません。ここで一意のフィールドを持つ重複キーエラーコレクション

は私のマングースモデルです:初めて

var schema = new Schema ({ 

     username: { 
      type: String, 
      required: false 
     }, 

     nickname: { 
      type: String, 
      required: false, 
      unique: true, 
      trim: true 
     }, 

     status: { 
      type: String, 
      required: false, 
      trim: true, 
      minlength: 1, 
      maxlength: 100 
     }, 

     avatar: String, 

     online: { 
      type: Boolean, 
      default: false 
     }, 

     created: { 
      type: Date, 
      default: Date.now 
     }, 

     device: { 
      type: ObjectId, 
      ref: 'Device', 
      required: false 
     }, 

     createdRooms:[{ 
      type: Schema.Types.ObjectId, 
      ref: 'Room' 
     }], 

     facebook: { 
      facebookToken: { 
       type: String, 
       required: false, 
       trim: true, 
       unique: false 
      }, 

      facebookId: { 
       type: String, 
       required: false, 
       trim: true, 
       unique: false 
      } 
     } 
    }, 

    { 
     toObject: { 
      virtuals: true 
     }, 
     toJSON: { 
      virtuals: true 
     } 

}); 

、ニックネームのない文書がデータベースに追加されますが、私はニックネームずに別の文書を保存するとき、私はエラーを取得します:

MongoError: E11000 duplicate key error collection: grooptag.users index: nickname_1 dup key: { : null } 
+1

ニックネームは必須ではないが一意ではないという問題はありませんか? –

+1

@NadiaCerezoはい、ただし、フィールドが一意で、必須ではないことを確認する方法はありますか? – nickheck

答えて

1

だから私は「MongoDBは必要ですがユニークではありません」見上げて、私はこれが見つかりました:あなたが使用する必要があるようだmongoDB/mongoose: unique if not null

をあなたが望むものを得るためにrequired: falseの代わりに0。

編集:https://docs.mongodb.com/manual/core/index-partial/#index-type-partial

問題は、ドキュメントがはっきりと述べている間:スパース索引のMongoDBのドキュメントを読んで、しかし、私はそれ以降のMongoDB 3.2から移動するための方法であるように見える部分インデックスにリダイレクトされました:

Partial indexes represent a superset of the functionality offered by sparse indexes and should be preferred over sparse indexes.

彼らはまた、同じページに述べることから、スパースとユニークインデックスの真実ではないようです。

A partial index with a unique constraint does not prevent the insertion of documents that do not meet the unique constraint if the documents do not meet the filter criteria.

自分自身と矛盾する方法:/

+1

ありがとうございます。私は確認してお知らせします。 – nickheck

+0

これは私のために働いていません。 「疎」は参照型フィールドのみのようです。 – nickheck

+0

奇妙な、ここの文書https://docs.mongodb.com/manual/core/index-sparse/状態:スパースでユニークなインデックスは、コレクションがフィールドの重複値を持つドキュメントを持つのを防ぎますが、キーを省略します。 これはあなたが望むもののように聞こえるよね? –

関連する問題