为什么 Mongoose 不验证更新?

2023-12-29

我有这个代码

var ClientSchema = new Schema({
  name: {type: String, required: true, trim: true}
});

var Client = mongoose.model('Client', ClientSchema);

使用express,我使用此代码创建一个新客户端

var client = new Client(req.body);
client.save(function(err, data) {
  ....
});

如果我将表单上的名称字段留空,猫鼬将不允许创建客户端,因为我根据架构上的要求进行了设置。另外,如果我在名称前后留下空格,猫鼬会在保存之前删除该空格。

现在,我尝试使用此代码更新客户端

var id = req.params.id;
var client = req.body;
Client.update({_id: id}, client, function(err) {
  ....
});

它允许我更改名称,但如果我在表单上将其保留为空,猫鼬不会验证并保存空名称。如果我在名称前后添加空格,则会用空格保存名称。

为什么猫鼬在保存时验证而不是在更新时验证?我以错误的方式做这件事吗?

MongoDB:2.4.0 猫鼬:3.6.0 快递:3.1.0 节点:0.10.1


从 Mongoose 4.0 开始,您可以运行验证器 http://www.mongodb.com/blog/post/introducing-version-40-mongoose-nodejs-odm on update() and findOneAndUpdate()使用新标志runValidators: true.

Mongoose 4.0 引入了运行验证器的选项update() and findOneAndUpdate()来电。打开此选项将运行验证器 对于您的所有领域update()呼叫尝试$set or $unset.

例如,给定 OP 的架构:

const ClientSchema = new Schema({
  name: {type: String, required: true, trim: true}
});

const Client = mongoose.model('Client', ClientSchema);

每次更新时传递标志

您可以像这样使用新标志:

const id = req.params.id;
const client = req.body;
Client.update({_id: id}, client, { runValidators: true }, function(err) {
  ....
});

在 a 上使用该标志pre hook

如果您不想每次更新内容时都设置标志,您可以设置pre钩子findOneAndUpdate():

// Pre hook for `findOneAndUpdate`
ClientSchema.pre('findOneAndUpdate', function(next) {
  this.options.runValidators = true;
  next();
});

然后你可以update()使用验证器而不通过runValidators 每次都会标记。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Mongoose 不验证更新? 的相关文章

  • Mongoose,索引位置数组

    我在文档中有一个位置数组 我想在该数组上添加 2dSpere 索引 那可能吗 var LocationSchema new Schema type type String required true geometry type type S
  • $lookup 多个级别而不使用 $unwind?

    我有以下收藏 场地集合 id ObjectId 5acdb8f65ea63a27c1facf86 name ASA College Manhattan Campus addedBy ObjectId 5ac8ba3582c2345af70d
  • 如何在 mongodb 中使用一个查询更新每个值

    我有一个数据如下 id 1 exist true id 2 exist false id 3 exist false 当我 findOneAndUpdate id 2 exist true 时 我希望使用聚合等在一个查询中自动将 id 1
  • 嵌套过滤器:$filter 数组,然后是 $filter 子数组

    本质上 我试图过滤掉已被 废弃 的子文档和子子文档 这是我的架构的精简版本 permitSchema id name feeClassifications new Schema id trashed name fees new Schema
  • 操作 `posts.find()` 缓冲在 10000 毫秒后超时

    当我在本地尝试时 效果非常好 但 Heroku 在服务器部署后出现此错误 有人可以帮忙吗 message Operation posts find buffering timed out after 10000ms index js con
  • 检查字段是否存在于数组的子文档中

    我有一个与此类似的架构 id Number line items id String quantity Number review request sent Boolean total price String name String or
  • 在承诺中运行同步函数

    我是 JS 和异步操作的新手 在使用express的nodeJS路由器中 我使用mongoose从mongo聚合了一些数据 该数据是每隔 15 分钟从不同站点收集的天气数据 我使用猫鼬聚合管道处理数据 以获取每小时数据并按每个站点进行分组
  • mocha——手表和猫鼬模型

    如果我让 mocha 监视更改 每次保存文件时 mongoose 都会抛出以下错误 OverwriteModelError 无法覆盖Client模型一旦编译 我知道猫鼬不允许两次定义模型 但我不知道如何让它与mocha watch clie
  • 猫鼬的深层填充

    我有两个模式 一张用于用户 另一张用于帖子 在用户模式中 我有latestPost的一个属性 它是帖子模式中条目的ObjectId 当我加载用户对象时 我想将 lastestPost 作为对象获取 其中包含用户架构中作者的用户名 其中作者是
  • 如何在 Mongoose 中执行查找查询?

    我在 mongodb 中有一组电子书数据 例如 id ObjectId 58b56fe19585b10cd42981d8 cover path D Ebooks uploads ebooks cover 1488285665748 img1
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • 使用 mongoose 通过 React 应用程序将图像上传到 mongodb 数据库

    我正在为找到的对象创建一个反应应用程序 我想允许用户上传这些对象的照片 我尝试使用 axios 通过 post 请求将图像发送到猫鼬服务器 但它不起作用 这就是我如何将图像存储在带有预览的 React 组件中 handleImage eve
  • MongoClient:尝试使用 Mongoose 时未连接错误

    作为课程的一部分 我正在学习 MongoDB 现在正在学习 Mongoose 我已经完全按照课程中的方式编写了代码 但是当尝试使用node app js 我收到以下错误 node app js Output node 25772 Unhan
  • 猫鼬中的数组过滤器

    将查询转换为节点 arrayfilter 在 mongoose 中工作的版本或者如何在节点应用程序中运行它们 db getCollection student update id ObjectId 5a377d62d21a3025a3c3a
  • 如何查找 mongoose 的所有集合

    我应该找到存储在 mongo 数据库中的所有集合 require app models schemas loading application schemas mongoose connect mongodb localhost test
  • model.save() 返回无效输出

    我正在使用本文中的 Node js mongodb 和express 对 REST Api 进行简单测试 MERN 第一部分 使用 Node js 和 Express 构建 RESTful API https medium com week
  • 在 MongoDB 中删除时自动删除引用对象

    假设我有一个这样的架构 var Person new Schema name String var Assignment new Schema name String person ObjectID 如果我删除一个人 仍然可能会留下引用不存
  • 猫鼬查找并删除

    我正在尝试删除满足查询的多个文档 但是 我需要这些文档的数据将它们存储在单独的集合中以实现撤消功能 我让它工作的唯一方法是使用多个查询 Data find query exec function err data Data remove q
  • Mongoose 选择要从 findOneAndUpdate 返回的字段

    在 Nodejs 中使用 Mongoose 您可以使用 find 返回一些字段 例如 User findOne id 132324 first name 1 last name 1 exec 但我似乎无法弄清楚如何使用 findOneAnd
  • 服务器发现和监控引擎已弃用

    我在 Node js 应用程序中使用 Mongoose 这是我的配置 mongoose connect process env MONGO URI useNewUrlParser true useUnifiedTopology true u

随机推荐