使用Mongoose模式验证而不创建文档

11

假设我有一个JavaScript对象(data),我想检查它是否符合我定义的特定Schema,那么是否有一种方法可以在不将Schema转换为模型的情况下完成这个操作,即不需要创建一个填充了data的模型实例并运行mymodel.validate()呢?

我希望有一个Schema(definition).validate(data, callback)函数,但据我所知,validate函数是在Document类中定义的。


model.create(data).validate() 对我来说似乎并不难,也可能是您最好的选择。为什么您想要另一种语法呢? - Andreas Hultgren
不,如果不深入挖掘内部结构是不可能的。 - WiredPrairie
1
:( 我不想为这个模式创建一个模型,但也许我必须这样做。看起来应该是可提取的。 - Jared Forsyth
+1 我的使用情况是我想在客户端上验证文档。我的另一个用例是我想使用Mongoose的模式格式来验证我从不打算存储在DB中的内部消息。 - joeytwiddle
创建新文档有什么问题? - Algo7
3个回答

1

2021更新

Mongoose在2019年(v5.8.0)添加了这个功能,作为Model.validate(...)

您可以:

try {
  await Model.validate({ name: 'Hafez', age: 26 });
} catch (err) {
  err instanceof mongoose.Error.ValidationError; // true
}

0

您可以在Mongo端验证模式link
例如:

db.createCollection("students", {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "name" ],
         properties: {
            name: {
               bsonType: "string",
               description: "must be a string and is required"
            },
            year: {
               bsonType: "int",
               minimum: 2017,
               maximum: 3017,
               description: "must be an integer in [ 2017, 3017 ] and is required"
            }
         }
      }
   }
})

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - user14518353

0

一种方法是通过自定义验证器来执行。当验证失败时,无法将文档保存到数据库中。

或者另一种方法是使用MongoDB提供的validate()函数,该函数与您定义的模式相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接