sql >> データベース >  >> NoSQL >> MongoDB

Mongodbの一意のスパースインデックス

    私もこの問題を抱えていました。値をnullまたは一意にする必要がありました。そこで、両方のuniqueを設定しました およびsparse フラグ:

    var UserSchema = new Schema({
      // ...
      email: {type: String, default: null, trim: true, unique: true, sparse: true},
      // ...
    });
    

    そして、データベースが実際にdb.users.getIndexes();を使用してインデックスを正しく作成したことを確認しました。

    {
      "v" : 1,
      "key" : {
        "email" : 1
      },
      "unique" : true,
      "ns" : "test.users",
      "name" : "email_1",
      "sparse" : true,
      "background" : true,
      "safe" : null
    },
    

    (つまり、これはではありません ここでの問題と同じ:mongo_idフィールドの重複キーエラー

    私の間違いはdefaultを設定することでした nullへの値 。ある意味で、Mongooseは明示的なnullをカウントします 一意である必要がある値として。フィールドが定義されていない場合(またはundefined )その場合、一意であることが強制されません。

    email: {type: String, trim: true, unique: true, sparse: true},
    

    したがって、この問題も発生している場合は、デフォルト値を設定していないことと、値をnullに設定していないことを確認してください。 コード内の他の場所でも。代わりに、明示的に設定する必要がある場合は、undefinedに設定してください (または一意の値)。




    1. MongoDB:ネストされたキーの存在

    2. マングースで重複するドキュメントを確認するにはどうすればよいですか?

    3. MongoDB/Meteorを使用して配列内の特定の要素を更新する

    4. Json.NETがMongoObjectIdを逆シリアル化すると、間違った結果が返されます