Mongoose .update() 不会触发验证检查

2023-11-25

我可以设置超出枚举数组的值,但我不知道为什么猫鼬不验证该值,我是否以错误的方式更新枚举?

my code:

var OrderSchema = new mongoose.Schema({
status:{type:String,enum:['created','shipped','confirmed']},
)};

var changeOrderStatus = function(shopId,orderId,status,callback){

    Order.update({_id:orderId,shop:shopId},{$set:{status:status}},{upsert:false},
        function(err){

            console.log(err);
            callback(err);

    })
}

The status枚举应该只对三个有价值:['created','shipped','confirmed']

但我可以这样做:

enter image description here


4.0 版本之前的 Mongoose 不支持对 Schema 静态方法进行验证,例如.update, .findByIdAndUpdate, .findOneAndUpdate.

但它支持实例方法document.save()

因此,首先您需要找到订单,然后更改您想要的属性并致电.save()。像这样:

Order.findOne({ _id: orderId, shop: shopId }, function(err, order) {
  order.status = 'foo';
  order.save(function(err, savedOrder) {
    // ERROR HERE
  })
})

如果您使用 Mongoose 4.0,它支持以下验证Schema.update的领域$set and $unset运算符,当您包含runValidators: true更新调用中的选项。

所以你的更新将如下所示:

Order.update(
  { _id: orderId, shop: shopId },
  { $set: { status: status }},
  { upsert: true, runValidators: true }, function(err) {
    console.log(err);
    callback(err);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose .update() 不会触发验证检查 的相关文章

  • 如何在 Mongoose 中执行查找查询?

    我在 mongodb 中有一组电子书数据 例如 id ObjectId 58b56fe19585b10cd42981d8 cover path D Ebooks uploads ebooks cover 1488285665748 img1
  • Mongoose 对 Promise 拒绝处理

    我有点与 NodeJS 中的 Promise 模式作斗争 我正在数据库中查找用户 然后使用用户引用保存新实体 但是当用户不在数据库中时 我应该返回拒绝 但我不确定如何正确执行 有没有办法做得更好 顺便说一句 对不起 咖啡脚本 User fi
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • 最小验证在 Mongoose 中不起作用

    我有一个架构 其中余额字段的声明如下所示 balance type Number min 0 default 30 我将 0 设置为最小值 这样余额就不会为负值 但是当我通过更新查询减少余额值时 余额结果是负值 我的更新查询 User up
  • 错误:grid.mongo.GridStore不是构造函数,使用mongoose、Grid-fs-stream和grid multer存储

    我收到以下提到的错误 基本配置如下 我已经将文件上传到服务器上 我想下载它们但出现这些错误 我向 api files delete fileId 调用了 POST 请求 它应该调用路由并将文件返回给浏览器 而不是使用网格相关模块获取错误 M
  • 使用 Mongoose 在 JSLint 中抑制“需要一个标识符,而是看到“默认”(保留字)”

    我在用着jshint验证我的 JavaScript 文件 在服务器端 我使用 Node js 和 Mongoose 在 Mongoose 中 我被鼓励以如下方式编写模式 var UserSchema new mongoose Schema
  • 在 MongoDB 中删除时自动删除引用对象

    假设我有一个这样的架构 var Person new Schema name String var Assignment new Schema name String person ObjectID 如果我删除一个人 仍然可能会留下引用不存
  • MongoDB - 在父文档中填充 GridFS 文件元数据

    我使用 NodeJS 与 Express MongoDB Mongoose 和 GridFS 来上传和检索文件 我想通过 ID 引用其他文档中的文件 并在查询其他文档时填充文件元数据 例如 如果我有一个包含这样的文档的 用户 集合 id O
  • 如何在猫鼬中使用聚合

    如何在 mongoose 中定义以下 MongoDB 聚合查询 db contacts aggregate group id code Code name Name 查询的目的是获取不同代码和名称的列表 我当前的模型代码是 use stri
  • 服务器发现和监控引擎已弃用

    我在 Node js 应用程序中使用 Mongoose 这是我的配置 mongoose connect process env MONGO URI useNewUrlParser true useUnifiedTopology true u
  • 缩短node.js和mongoose中的ObjectId

    我的网址目前如下所示 http www sitename com watch companyId 507f1f77bcf86cd799439011 employeeId 507f191e810c19729de860ea someOtherI
  • 多个 2dsphere 索引,不确定要运行 geoNear 中的哪一个

    我在用 geoNear and near在 MongoDB 的聚合内部 我有将我的 MongoDB 数据库托管到 mlabs 中 And 我本地一切正常 但不知道为什么当我部署应用程序时出现以下错误 geoNear 命令失败 ok 0 0
  • 在节点中使用mongoosejs更新多条记录

    我在使用 mongoosejs 和 Node js 更新多个记录时遇到问题 由于某种原因 即使有多个匹配 我也只更新一条记录 我还注意到回调在 update 之后不会触发 我没有收到任何错误消息 这里发生了什么 Page find stat
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • Mongoose 多个连接

    目前我的连接有这个代码猫鼬 js var mongoose require mongoose var uriUtil require mongodb uri var mongodbUri mongodb localhost db name
  • MongoDB $geoIntersects 不适用于包含负顶点的多边形

    我已在数据库中存储了跨越 x 轴和 y 轴的多边形 并且我想搜索包含给定点的多边形 为此 我使用 geoIntersects 运算符来指定一个点 但是 当多边形穿过轴时 MongoDB 不会返回任何多边形 我可以对查询或架构进行任何小的更改
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • MongoDB:检查值是否为空或数组是否为空

    我想匹配所有不包含 公司 属性或 公司 值为空或空数组的文档 User find Company in null function err users if err throw err console log users length th
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • Passport-local-mongoose:createStrategy 不是函数/authenticate 不是函数

    我正在构建这个启动项目 https github com cj wang mean start tree 424e6056e33bb16874ae808daf3780d53309296f并尝试添加用户登录护照本地猫鼬 https www n

随机推荐

  • 使用 jquery 仅创建一个开始 div 标签

    好吧 我已经在这个网站上搜索了很多 但似乎找不到答案 所以我将以更好的理由问同样的问题 我正在尝试使用 jquery 添加一个开始 div 标签 当我尝试使用 after 时 我最终得到了 我知道 jquery 不喜欢像我想要的那样本地创建
  • PowerShell 会话中的字符编码 (UTF-8) [重复]

    这个问题在这里已经有答案了 Hei all 作为控制台 终端爱好者和数据库管理员 PostgreSQL 使用正确的字符编码对我来说至关重要 因此 我希望我的客户端控制台 终端窗口始终设置为例如UTF 8 回到 Windows 的 CMD E
  • celeryd 进程的数量是否取决于 --concurrency 设置?

    我们在 Supervisor 后面运行 Celery 并启动它 celeryd events loglevel INFO concurrency 2 然而 这会创建一个最多三层深并包含最多 7 个 celeryd 进程的流程图 Superv
  • Matplotlib图形facecolor(背景颜色)

    有人可以解释一下为什么下面的代码在设置图形的面部颜色时不起作用吗 import matplotlib pyplot as plt create figure instance fig1 plt figure 1 fig1 set fighe
  • Ansible 循环处理 URI 调用的 JSON 输出

    一段时间以来我一直在尝试让它发挥作用 但我无法做到这一点 我希望这是我所缺少的一些很小的东西 我正在尝试解析使用 with items 的任务的 JSON 输出 我知道最终组件的变量列表将包含在结果数组中 name Get list of
  • Swift:检查字符串是否有数组中的元素

    我想检查一个字符串是否至少包含数组中的一个元素 我试过这个 但我认为它太长了 想象一下 如果我想要 if 语句中的所有字母表 我希望有一个适当的方法来做到这一点 var str Hello playground let typeString
  • 无法将项目导入到android studio

    我正在尝试使用this library 我已经添加 compile net rdrei android dirchooser library 2 0 aar 到依赖项 我的顶级构建文件 Top level build file where
  • 创建一个零填充的二维数组,其位置由向量索引

    我正在尝试向量化以下 MATLAB 操作 给定一个带有索引的列向量 我想要一个带有 相同数量的行和固定数量的列 这 矩阵用零初始化并在位置中包含 1 由索引指定 这是我已经编写的脚本的示例 y 1 3 2 1 3 m size y 1 Fo
  • EditorFor() 和 html 属性

    Asp Net MVC 2 0 预览版提供了类似的帮助器 Html EditorFor c gt c propertyname 如果属性名称是字符串 上面的代码将呈现一个文本框 如果我想将 MaxLength 和 Size 属性传递到文本框
  • 如何获取真实运行的进程名称?

    在 NET core 控制台应用程序中 我想获取正在运行的进程名称 我使用ProcessName正如文档所说 但它总是返回dotnet作为进程名称 而不是正在运行的实际下划线 dll 虽然它是一个 dll 但这是一个控制台应用程序 而不是一
  • 空格导致 PowerShell 路径分割

    在包含空格的路径中调用 exe 时 我遇到了 powershell 问题 PS C Windows Services gt invoke expression C Windows Services MyService exe 术语 C Wi
  • 如何在 Scala/Lift 中惯用地处理 null 检查?

    即使 Box 和 Option monad 很流行 我们仍然必须到处检查空值 到目前为止我想出的最好的方法是使用 Box 方法 Box possiblyNull map toString openOr 有一个更好的方法吗 我尝试使用 Box
  • Eclipse 终止键盘快捷键

    How do I get eclipse to terminate I use the keyboard shortcut Ctrl F11 to run a program and I cannot enable the terminat
  • Expo 构建 EAS - 本地 - 未找到 SDK 位置

    当我使用来自博览会的新构建工具时EAS在本地构建我的 React Native 应用程序 eas build platform android local 我收到一个错误 未找到 SDK 位置 使用 ANDROID SDK ROOT 定义位
  • 给定一组点,如何找到彼此最远的两个点? [复制]

    这个问题在这里已经有答案了 可能的重复 最大线性尺寸二维点集 我可以计算每个点之间的距离并取最大的距离 但是当有大量 gt 1000 点时 这听起来不是一种非常有效的方法 注意 这是针对 iPhone 的 所以我没有太多的处理能力 为什么不
  • 如果没有堆内存,如何释放 std::vector

    我有一个这样的类成员变量 vector
  • 在 Microsoft Outlook 中使用 applescript 创建新的外发邮件

    我正在尝试使用 Microsoft Outlook 2011 for mac 创建新的外发邮件 使用AppleScript 以下示例适用于10 6 8 tell application Microsoft Outlook set newMe
  • 数据库大小计算?

    估计具有以下特征的数据库有多大的最准确方法是什么 MySQL 1 Table with three columns id gt 大整型 字段1 gt varchar 32 字段2 gt 字符 32 field2 上有一个索引 您可以假设 v
  • 在 bash 中创建 RS256 JWT

    我正在尝试仅使用 bash 和 openSSL 构建 RS256 JWT 令牌 我可以使用的开发工具有限 我设计了一个脚本 它从 txt 文件中获取标头和有效负载 去掉换行符等 base 64URL 对它们进行编码并用 将它们连接在一起 分
  • Mongoose .update() 不会触发验证检查

    我可以设置超出枚举数组的值 但我不知道为什么猫鼬不验证该值 我是否以错误的方式更新枚举 my code var OrderSchema new mongoose Schema status type String enum created