2017-07-13 15 views
1

インデックスではないフィールドで一意に強制する方法を調べようとしています。mongoose:一意のフィールドが機能していません

私はここで似たような質問をしましたが、dropDups:trueを使用した回答が降格されていると言われています。

フィールド上で一意に強制する正しい方法は何ですか?

const users = new Schema({ 
email: { type: String, required: true , unique: true}, 
...}); 
+0

私はあなたのコードが完璧だと思います、私は動作します。インデックスを使用する際に問題が発生していますか? – JosephM

+0

私はちょうどmongoose APIで見つかった: 初心者のための共通の問題は、スキーマのためのユニークなオプションはバリデータではないということです。 MongoDB固有のインデックスを構築するのに便利なヘルパーです。 だから、私は一意にしたい非インデックスフィールドのために、私は手動で検証を書く必要があると思います –

+0

@ YoniMayer値が一意であるかどうかを確実にチェックします_without_インデックスを使用していますか? – robertklep

答えて

0

このようにすると、一意のキー検証には使用できません。

var userSchema = new Schema({ 
    name : String, 
    username : { 
     type : String, 
     required : true, 
     index : { 
      unique : true, 
      dropDups : true 
     } 
    }); 

ですから、今正しいと最善の方法でそれをやって、ちょうど

> db.<collection name>.drop() 

はその後、サーバーとチェックを再起動し、次のコマンドを使用して、データベースからこの

ドロップのようなコレクションをそれを行いますこのようにして。

var userSchema = new Schema({ 
    name : String, 
    username : { 
     type : String, 
     required : true, 
     unique : true 
    }); 
+0

Thx JosephM、 しかし、私が目指していたのは、インデックスではないフィールドでは一意です。 –

+0

ここではユーザ名はインデックスではなく、インデックスフィールドをdbでチェックすることができます。 .getIndexes()。 – JosephM

関連する問題