问题描述
我想验证请求中的每个值,这些值是字符串数组。像
emails: [ 'johndoe@gmail.com','jandoe@gmail.com' ]
这是我的模式
const UserSchema = mongoose.Schema({
name: {
type: String,index: true,required: true,},emails: [String],});
body("emails").custom((value,{ req }) => {
return User.findOne({
emails: { $all: value },_id: { $ne: req.params.id },}).then((exists) => {
if (exists) {
return Promise.reject("Email already exists!");
}
});
});
但是问题是,如果我尝试在数组中发布多封电子邮件,验证将失败,并且数据将被插入到db中。如何检查其中一封电子邮件是否已存在并拒绝请求?
解决方法
在$in的文档中,它提到:
如果该字段包含一个数组,则
$in
运算符将选择其字段包含一个数组的文档,该数组包含至少一个与指定数组中的值匹配的元素...
因此您可以通过以下方法解决它:
User.findOne({
emails: { $in: value },_id: { $ne: req.params.id },})...