Mongoose 中使用 mongoose-array-unique 进行数组内唯一性验证
在 Mongoose 中,我们经常会遇到需要对数组进行内部唯一性验证的情况。这时候,我们可以使用 mongoose-array-unique 插件来实现这一功能。
mongoose-array-unique 是一个 Mongoose 插件,它可以让我们对数组进行唯一性验证。它的使用非常简单,只需要在 Mongoose Schema 中引入该插件,然后在数组类型字段上设置 unique: true 即可。
下面是一个示例代码:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const uniqueValidator = require('mongoose-array-unique'); const Schema = mongoose.Schema; const userSchema = new Schema({ name: String, emails: { type: [String], unique: true, required: true } }); userSchema.plugin(uniqueValidator); const User = mongoose.model('User', userSchema); const user = new User({ name: 'Alice', emails: ['alice@example.com', 'alice@example.com'] }); user.save((err) => { console.log(err); // ValidationError: emails: Path `emails` is not unique. });
在上面的代码中,我们定义了一个 User Schema,并在 emails 字段上设置了 unique: true。然后,我们使用 uniqueValidator 插件来启用唯一性验证功能。最后,我们创建了一个包含两个相同邮箱的用户,并试图保存它。由于 emails 字段设置了 unique: true,因此保存操作失败,返回了一个 ValidationError。
除了在 Schema 上设置 unique: true,我们还可以在插入或更新文档时使用 $addToSet 操作符来确保数组内唯一性。例如:
User.findOneAndUpdate( { _id: userId }, { $addToSet: { emails: 'new-email@example.com' } }, { new: true }, (err, user) => { console.log(user.emails); // ['alice@example.com', 'new-email@example.com'] } );
在上面的代码中,我们使用了 $addToSet 操作符来向 emails 数组中添加一个新的邮箱。如果该邮箱已经存在于数组中,则该操作不会有任何影响。
总结
在 Mongoose 中,我们可以使用 mongoose-array-unique 插件来实现对数组内部唯一性的验证。该插件非常容易使用,只需要在 Schema 中引入并在数组类型字段上设置 unique: true 即可。此外,我们也可以在插入或更新文档时使用 $addToSet 操作符来确保数组内唯一性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/656827fed2f5e1655d0ea2d2