当前位置: 首页 > 知识库问答 >
问题:

跳过或禁用mongoose模型save()调用的验证

傅树
2023-03-14

我希望创建一个保存到MongoDB的新文档,不管它是否有效。我只想在模型保存调用时暂时跳过mongoose验证。

在我的CSV导入案例中,CSV文件中不包括一些必填字段,尤其是其他文档的引用字段。然后,以下示例的mongoose validation required检查未通过:

var product = mongoose.model("Product", Schema({
    name: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true,
        default: 0
    },
    supplier: {
        type: Schema.Types.ObjectId,
        ref: "Supplier",
        required: true,
        default: {}
    }
}));

var data = {
    name: 'Test',
    price: 99
}; // this may be array of documents either

product(data).save(function(err) {
  if (err) throw err;
});

是否有可能让Mongoose知道不执行验证中的保存()调用?

我也试过这个模型。create(),但它也会调用验证过程。

共有3个答案

何向荣
2023-03-14

您可以拥有使用相同集合的多个模型,因此可以创建第二个模型,而无需使用CSV导入所需的字段约束:

var rawProduct = mongoose.model("RawProduct", Schema({
    name: String,
    price: Number
}), 'products');

model的第三个参数提供了一个明确的集合名称,允许此模型也使用products集合。

蓟清野
2023-03-14

虽然有一种禁用验证的方法,但我不知道您的选择之一是使用不使用中间件的方法(因此没有验证)。其中一个是insert,它直接访问Mongo驱动程序。

Product.collection.insert({
  item: "ABC1",
  details: {
    model: "14Q3",
    manufacturer: "XYZ Company"
  },

}, function(err, doc) {
  console.log(err);
  console.log(doc);
});
查宜民
2023-03-14

这从v4开始就受到支持。4.2:

doc.save({ validateBeforeSave: false });
 类似资料:
  • 我有一个h:inputText、h:selectonemenu和commandbuton。Inputtext是必填字段,我已将其定义为immediate=“true”。然后,当我单击按钮时,我想将selectonemenu的当前值传递给托管bean。但它的passig为空。如何管理此验证,以便它允许我在托管bean中获取selectOneMenu的值。。 我的代码是...

  • 我试图在我的数据库中保存一个json对象。未调用save()函数,但从未保存json对象。帮我解决这个问题。我想这是猫鼬的连接问题。这是我的密码。。 我的控制台日志:: 新增用户api命中!!json的内容是: 143没有userrs: 144 db中的用户计数已更新!!这个人生成的id是:ipkoID_C144调用保存函数obj::{"name":"Abhi","密码":"jio","usern

  • 假设我有一个应用程序,它定义了几个模型并创建了全局Mongoose连接()。该应用程序还依赖于由目录中的模块定义的一些模型。我遇到的问题是应用程序和单独的模块不共享相同的全局连接对象。 好吧,好吧。与其让模块导出模型,它可以只导出模式,主应用程序可以将其注册到连接中。在应用程序中,会有如下内容: 有其他选择吗? 多谢.

  • 问题内容: 我正在尝试在MongoDB中更新实例化模型(“地方”-我知道它可以在其他路线中使用),并且花了一段时间尝试正确地做到这一点。我还试图重定向回查看“位置”的页面,以查看更新的属性。 节点v0.4.0,Express v1.0.7,Mongoose 1.10.0 架构: 控制器/路线: }); 我尝试了多种方法,但似乎无法理解。 另外,我不是如何声明三个{name,capital和cont

  • 问题内容: 我正在寻找一种与Mockito进行验证的方法,即在测试过程中与给定的模拟没有任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,没有任何内容打印到控制台上。jUnit的总体思路如下: A 有很多方法,我真的不想用单独的验证方法来验证每个方法,而… 因此,我希望,如果有一个简单的解决方案,鉴于我具有良好的测试覆盖

  • 当我们出于开发目的或其他需要尝试访问SSL安全URL(或站点)时,当浏览器找不到我们正在访问的特定站点的有效SSL证书时,它会显示以下错误。 在WINDOWS OS中,它显示PROCEED选项,但在MAC OS中不显示此选项。 那么,如何简单地跳过MAC OS或其他操作系统中浏览器的SSL检查呢。