📌  相关文章
📜  mongodb mongoose 字段值不在一组值中 (1)

📅  最后修改于: 2023-12-03 15:32:56.607000             🧑  作者: Mango

Mongoose: 字段值不在一组值中

在Mongoose中,可以通过定义枚举类型的字段来指定该字段允许的值。但是,在某些情况下,需要指定该字段不允许的值。本文将介绍如何使用Mongoose来实现该功能。

定义枚举类型字段

首先,我们需要先定义一个枚举类型的字段。例如,我们定义一个“颜色”字段,其允许的值为“红色”、“黄色”和“蓝色”。

const mongoose = require('mongoose');

const schema = new mongoose.Schema({
  color: {
    type: String,
    enum: ['红色', '黄色', '蓝色']
  }
});

const Model = mongoose.model('Model', schema);
验证字段值

在Mongoose中,可以通过定义验证器来验证字段值。在验证器中,我们可以检查字段值是否在一组值中。例如,我们可以定义一个验证器来检查“颜色”字段是否不在“白色”和“黑色”中。

const mongoose = require('mongoose');

const schema = new mongoose.Schema({
  color: {
    type: String,
    enum: ['红色', '黄色', '蓝色'],
    validate: {
      validator: function(value) {
        return !['白色', '黑色'].includes(value);
      },
      message: '颜色不能为白色或黑色'
    }
  }
});

const Model = mongoose.model('Model', schema);

在上面的示例中,我们定义了一个验证器函数,该函数使用JavaScript的Array.includes()方法来检查字段值是否不在一组值中。如果字段值在组中,则验证失败,并返回指定的错误消息。

测试验证器

在使用验证器之前,我们需要首先进行测试,以确保它正常工作。例如,我们可以创建一个新文档,将“颜色”字段设置为“白色”,然后尝试保存该文档。

const doc = new Model({ color: '白色' });

doc.save(err => {
  console.log(err.message); // 颜色不能为白色或黑色
});

在上面的示例中,我们尝试保存带有“白色”字段值的文档。由于该值不在允许的值列表中,因此验证失败,文档未保存,并返回指定的错误消息。

结论

在Mongoose中,可以通过定义枚举类型的字段和验证器来指定字段不允许的值。这种方法可以防止潜在的错误,并提高应用程序的可靠性。