验证猫鼬中的字符串数组

时间:2020-10-14 12:48:26

标签: mongodb express mongoose express-validator

我想验证请求中的每个值,这些值是字符串数组。像

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中。如何检查其中一封电子邮件是否已存在并拒绝请求?

1 个答案:

答案 0 :(得分:1)

$in的文档中,它提到:

如果该字段包含一个数组,则$in运算符将选择其字段包含一个数组的文档,该数组包含至少一个与指定数组中的值匹配的元素...

因此您可以通过以下方法解决它:

User.findOne({
  emails: { $in: value },
  _id: { $ne: req.params.id },
})...