猫鼬:唯一字段不起作用

Yon*_*yer 6 unique mongoose node.js

我试图找出如何在不是索引的字段上强制执行唯一性。

我在这里看到过类似的问题,但提到使用dropDups: true的答案已被弃用。

在字段上强制执行唯一性的正确方法是什么?

const users = new Schema({
email: { type: String, required: true , unique: true},
...});
Run Code Online (Sandbox Code Playgroud)

小智 7

使用这个 mongoose-unique-validator

var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
 
// Define your schema as normal.
var userSchema = mongoose.Schema({
    username: { type: String, required: true, unique: true },
    email: { type: String, index: true, unique: true, required: true },
    password: { type: String, required: true }
});
 
// Apply the uniqueValidator plugin to userSchema.
userSchema.plugin(uniqueValidator);
Run Code Online (Sandbox Code Playgroud)

  • 解决了我的问题。为什么我们需要另一个第三方包来解决这个问题? (2认同)

Jos*_*phM 0

如果您这样做,它将无法用于唯一密钥验证。

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

所以你现在就以正确且最好的方式做,就这样做

使用以下命令从数据库中删除集合

> db.<collection name>.drop()
Run Code Online (Sandbox Code Playgroud)

然后重新启动服务器并按此方法进行检查。

var userSchema = new Schema({
    name : String,
    username : {
        type : String,
        required : true,
        unique : true
    });
Run Code Online (Sandbox Code Playgroud)