Node.js 目的';是唯一的';猫鼬场

Node.js 目的';是唯一的';猫鼬场,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我不理解猫鼬模式中的unique和required等字段的用途。在unique的情况下,您似乎必须编写自己的方法来查询MongoDB,以查看该值是否已经存在。我想使用'required'Mongoose只需要检查该值是否传递到Mongoose模型的构造函数中。但对于unique,我不明白它的目的 userSchema = mongoose.Schema({ username: { type: String, unique: tru

我不理解猫鼬模式中的
unique
required
等字段的用途。在
unique
的情况下,您似乎必须编写自己的方法来查询MongoDB,以查看该值是否已经存在。我想使用'required'Mongoose只需要检查该值是否传递到Mongoose模型的构造函数中。但对于unique,我不明白它的目的

userSchema = mongoose.Schema({

        username: {
            type: String,
            unique: true,
            required: true,
            validate: [validation.usernameValidator, 'not a valid username']
        },
         ...

为了验证用户名,我必须创建自己的函数=validation.usernameValidator来检查MongoDB以查看用户名是否已经存在。那么isUnique的意义是什么呢?

unique
将在属性上创建MongoDB,防止该属性具有相同值的文档存在于同一集合中

但是,由于它是由数据库强制执行的,因此唯一有效的方法是保存文档并捕获MongoDB将返回的重复密钥错误

您可以这样检查该错误:

if (err && err.code === 11000) { ...duplicate... }

是的,我做到了“unique”是正确的,我明白了,所以您仍然需要查询MongoDB以查看是否使用了用户名,但MongoDB将查看索引而不是文档/集合。最初我认为,通过使用unique属性,Mongoose/MongoDB可以处理上述问题。但从你所说的来看,我仍然需要向Mongo发送一个查询。IMO应该在其中烘焙吗?@Olegzandr文档声明
unique
在数据库中创建唯一索引,仅此而已。尽管我同意可以预期是Mongoose(而不是MongoDB)处理唯一性冲突(尽管这只能通过Mongoose执行您现在必须手动执行的查询来实现)