首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么mongoose save()不使用嵌套模式的默认值更新现有文档?

mongoose save()方法在更新现有文档时不使用嵌套模式的默认值,这是为了避免潜在的数据不一致性问题和意外的行为。

在嵌套模式中,当我们定义一个嵌套的对象并设置了默认值时,如果我们直接使用save()方法更新现有文档,这些默认值不会被应用于更新的文档中。这是因为save()方法只会保存我们提供的实际更新值,而不会考虑嵌套对象的默认值。

这个设计决策是出于对数据一致性的考虑。如果默认值被应用于更新文档,那么它可能会覆盖掉已经存在的值,导致数据的丢失或不正确。为了保证数据的准确性,Mongoose选择不使用嵌套模式的默认值进行更新。

要在更新文档时应用嵌套模式的默认值,我们可以在更新之前手动合并默认值到更新对象中,然后再使用save()方法保存。这样可以确保更新的文档具有嵌套对象的默认值。

虽然我们没有提及云计算的相关知识,但根据问题的要求,我们也不需要提及任何特定的云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你真的了解mongoose吗?

该 versionKey 是每个文档首次创建时,由 mongoose 创建一个属性。包含了文档内部修订版。此文档属性是可配置默认值为__v。...到这里,已经基本介绍完了Schema,接下来看一下SchemaTypes 模式类型(SchemaTypes) SchemaTypes为查询和其他处理路径默认值,验证,getter,setter,字段选择默认值...", userSchema); let person1 = new Person({ name: '森林' }); person1.save() // 使用save()方法,需要先实例化为文档,再使用...save()方法保存文档。...sort:如果查询条件找到多个文档,则设置排序顺序以选择要更新哪个文档。 maxTimeMS:为查询设置时间限制。 upsert:布尔值,如果对象不存在,则创建它。默认值为 false。

41.5K30
  • Mongoose学习参考文档

    ,但不能更新主键,这就是为什么要删除主键原因。   ...remove方法 4.Sub Docs   如同SQL数据库中2张表有主外关系,Mongoose将2个Document嵌套叫做Sub-Docs(子文档)   简单说就是一个Document嵌套另外一个...如果子文档更新时出现错误,将直接报在父类文档中,可以这样处理: ChildrenSchema.pre('save',function(next){ if('x' === this.name...,可以通过如下方法查询到children var child = parent.children.id(id); 4.2 新增、删除、更新   子文档是父文档一个属性,因此按照属性操作即可,...done); }); 8.3 中间件特点   一旦定义了中间件,就会在全部中间件执行完后执行其他操作,使用中间件可以雾化模型,避免异步操作层层迭代嵌套 8.4 使用范畴 复杂验证 删除有主外关联

    24.2K90

    Nodejs学习笔记(十四)— Mongoose介绍和入门

    简介   Mongoose是在node.js异步环境下对mongodb进行便捷操作对象模型工具   那么要使用它,首先你得装上node.js和mongodb,关于mongodb安装和操作介绍可以参考...里会用到一种数据模式,可以理解为表结构定义;每个schema会映射到mongodb中一个collection,它不具备操作数据库能力   我们先改造一下db.js,导出mongoose对象  ...其它操作   其它还有比较多常用 索引和默认值   再看看我对user.js这个schema修改 /** * 用户信息 */ var mongoose = require('....mongoose操作基本入门大致就是这些,自已试一下,入门完全没问题,并且比node-mongodb-native还是要简单明了一些,   在node.js中操作数据库,如果逻辑相对复杂时,大量回调嵌套还是比较郁闷...,下一篇于mongoose操作多逻辑组合回调嵌套问题给出一种方案^_^!

    2.6K60

    MongoDB增删改查操作

    实际在数据库中产生集合名为courses 2.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下save方法将数据保存到数据库中。...: true }); // 调用实例对象下save方法将数据保存到数据库中。...course.save(); 方法2 和数据库相关所有操作都是异步操作 创建文档  插入数据 Course.create({    name: 'JavaScript',    author: '...查询条件}, {要更改值}).then(result => console.log(result)) ​ ​ // 更新单条文档 如果条件满足多个文档,也是默认只更新第一个 User.updateOne...const postSchema = new mongoose.Schema({    title: {        type: String,        // 必传字段,传就会报错

    6.5K20

    Nodejs和Mongodb连接器Mongoose

    同时它也是一个对象数据库,没有表、行等概念,也没有固定模式和结构,所有的数据以文档形式存储(文档,就是一个关联数组式对象,它内部由属性组成,一个属性对应值可能是一个数、字符串、日期、数组,甚至是一个嵌套文档...MongoDB —— 是一个对象数据库,没有表、行等概念,也没有固定模式和结构,所有的数据以Document(以下简称文档)形式存储(Document,就是一个关联数组式对象,它内部由属性组成,...一个属性对应值可能是一个数、字符串、日期、数组,甚至是一个嵌套文档。)...Entity简述 Entity —— 由Model创建实体,使用save方法保存数据,Model和Entity都有能影响数据库操作,但Model比Entity更具操作性。...创建集合 基于前面的内容,接下来我们就开始学习对数据具体操作了,下面是关于一些基础数据定义,相信对于你来说已经陌生了,请在仔细温习一遍吧!

    5.9K41

    MongoDB增删改查操作

    实际在数据库中产生集合名为courses 1.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下save方法将数据保存到数据库中。...: true }); // 调用实例对象下save方法将数据保存到数据库中。...course.save(); 方法2 和数据库相关所有操作都是异步操作 创建文档 插入数据 Course.create({ name: 'JavaScript', author: '...查询条件}, {要更改值}).then(result => console.log(result)) ​ ​ // 更新单条文档 如果条件满足多个文档,也是默认只更新第一个 User.updateOne...使用id对集合进行关联 使用populate方法进行关联集合查询 // 关联集合 ​ const mongoose = require('mongoose'); // 连接数据库 mongoose.connect

    6.2K10

    在Node中如何操作MongoDB数据库

    MongoDB是一款流行文档型数据库,可以在Node.js中使用官方MongoDB包或者第三方包mongoose进行操作。...mongoose来操作MongoDB数据库官方文档:https://mongoosejs.com/首先需要安装mongoose包:npm install mongoose --save然后连接数据库并进行操作...使用官方 mongodb 包来操作 MongoDB 数据库官方 mongodb 包提供了许多方法来操作 MongoDB 数据库,例如:连接数据库、创建集合、插入文档、查询文档更新文档、删除文档等。...在使用 mongoose 操作 MongoDB 数据库时,一般步骤是:设计 Schema(模式)、发布 Model(模型)、增删改查数据。...增删改查数据时,可以通过构造函数生成文档对象,然后对文档对象进行操作,例如 save() 方法保存数据、remove() 方法删除数据、findOneAndUpdate() 方法更新数据等。

    28700

    初试MongoDB学习之Mongoose使用

    mongoose简介 mongoose官网:https://mongoosejs.com/ #为什么要用Mongoose Mongoose就是一个让我们可以通过Node来操作MongoDB一个模块。...#Mongoose优势 可以像操作对象一样操作数据库 可以为文档创建一个模式结构(Schema) 可以对模型中文档/文档进行验证 数据可以通过类型转换为对象模型 可以使用中间件来应用业务逻辑挂钩 比...Node原生MongoDB驱动更容易 #使用Mongoose 下载安装mongoose模块 cnpm install mongoose --save 引用mongoose: var mongoose...#定义一个Schema(表/ 模式对象) //新建Schema 定义规则/字段规则 let Schema= mongoose.Schema; //定义personSchema字段(规则)需要new一下...#Entity Entity—— 由Model创建实体,使用save方法保存数据,Model和Entity操作都能影响数据库操作,但Model比Entity更具操作性。

    5.9K20

    mogoose 创建数据库并增删改查

    是否必须 是否重复 默认值 等,如下定义了一个用户表结构 注意:如果定义表结构时没有定义_id,mongoose会自己添加一个该字段,该字段不会重复,类型为ObjectId,通过findById()查询...默认值 }, bio: String, //! 默认没有可以写 }, { timestamps: true, //!...添加`createdAt updatedAt`创建时间和更新时间两个字段 } ); 如果在定义了结构后需要添加新字段,在实例上使用add()方法 创建表model 通过mongoose.model...: 创建表数据实例化model 通过传入具体数据来实例化表,能获得一条具体表数据,类型为Mongoose Documents,向数据库中查找到也是这种类型数据 const user = new User...(userData); 保存save 获得具体表后只需要调用Model.prototype.save就会把数据存入数据库中 注意:该方法为异步方法 await user.save(); 通过Model.create

    5.1K30

    MongoDB数据库基本操作

    基础', author: '一客', isPublished: true }); //将文档插入数据库中 course.save(); 通过集合构造函数方法(create)创建文档 const...User = mongoose.model('User', userSchema); // 查找到一条文档并且删除 // 返回删除文档 // 如何查询条件匹配了多个文档 那么将会删除第一个匹配文档...User.deleteMany({}).then(result => console.log(result)) 更新修改文档 updateOne 单个 如果更新条件匹配多个默认只更新第一个 updateMany...User = mongoose.model('User', userSchema); // 找到要删除文档并且删除 // 返回是否删除成功对象 // 如果匹配了多条文档, 只会删除匹配成功第一条文档...Number, // // 数字最小范围 min: 18, // // 数字最大范围 max: 100 }, publishDate: { type: Date, // 默认值

    4.2K10

    Mongoose 插件记录Node.js API日志

    现在已经有了 npm 日志记录模块。这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行ORM Mongoose 讨论 Node.js Express 程序中 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁方式为你进行记录并简化 API 日志? Mongoose插件是什么? 在 Mongoose 中,模式是可插入。...插件就像一个函数,你可以在模式使用它,并在模式实例上一次次地重用。 Mongoose 还提供全局插件,你可以将其用于所有模式。...现在我们需要使用架构上可用 init 和 save 方法。 this.isNew():如果你正在创建新文档,那么只需返回 next()中间件。.../app/utils/diff-plugin')) 这是 user 更新 API 基本示例: const User = require('..

    2.8K40

    精读《Prisma 使用

    Prisma 是一个现代 Nodejs ORM 库,根据 Prisma 官方文档 可以了解这个库是如何设计与使用。...,唯一多出来 posts 与 author 其实是弥补了数据库表关联外键中直观部分,将这些外键转化为实体对象,让操作时感受不到外键或者多表存在,在具体操作时再转化为 join 操作。...@default 设置字段默认值,可以联合函数使用,比如 @default(autoincrement()),可用函数包括 autoincrement()、dbgenerated()、cuid()、uuid...where name="Eleanor",即通过对象嵌套方式表达语义。...总结 Prisma Schema 是 Prisma 一大特色,因为这部分描述独立于代码,带来了如下几个好处: 定义比 Node Class 更简洁。 生成冗余代码结构。

    3.7K30

    深入浅出mongodb(一)

    2. mongoose 2.1 安装 npm i mongoose -S 2.2 使用 在 node.js 里采用是CommonJS[4]规范,需要我们采用 require 方法来引入需要包。...官网给解释是: Mixed是一种无模式类型,"anything"随便什么都可以,一般使用Schema.Types.Mixed或者{}来表示。...ObjectId是一种特殊类型,用于唯一标识符,可以理解为主键,一般使用mongoose.Types.ObjectId。...更多文档参考https://mongoosejs.com/docs/schematypes.html[5] ?有人可能会问为什么 ObjectId 可以做唯一标识符呢,不会重复吗?...本文结束,有什么问题和有错误地方,欢迎大家留言和评论,还有后续更新,下期更加精彩 参考资料 [1] 菜鸟教程: https://www.runoob.com/mongodb/mongodb-intro.html

    4K10

    Node.js中MongoDB

    ,如果要查询内嵌文档则可以通过.形式来匹配 //如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号 db.colleges.find({'classes.core':"三大框架"}); /...mongoose相关概念 mongoose中提供了几个新对象: + Schema(模式对象):Schema对象定义约束了数据库中文档结构 + Model:Model对象作为集合中所有文档表示...,相当于MongoDB数据库中集合collection + Document: Document表示集合中具体文档 mongoose使用步骤 1.下载安装Mongoose: npm i mongoose...--save 2.在项目中引入mongoose:let mongoose = require("mongoose"); 3.连接MongoDB数据库:mongoose.connect('mongodb...://数据库ip地址:端口号/数据库名'); 如果端口号是默认端口号(27017) 则可以省略写 4.

    5.3K40

    Koa入门(四)Koa 操作数据库

    意义是:适用关系型数据库时候就使用关系型数据库,不适用时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适数据存储。...而非关系型数据库以键值对 (key-value) 存储,它结构固定,每一条记录可以有不一样键,每条记录可以根据需要增加一些自己键值对,这样就不会局限于固定结构,可以减少一些时间和空间开销。...1.1 NoSql数据库优缺点 在优势方面主要体现在下面几点: 简单扩展 快速读写 低廉成本 灵活数据模型 在不足方面主要有下面几点: 不提供对SQL支持 支持特性不够丰富 现有的产品不够成熟...2.1 主要特性 面向集合存储,易于存储对象类型数据 模式自由 支持动态查询 支持完全索引,包含内部对象 支持复制和故障恢复 使用高效二进制数据存储,包括大型对象 文件存储格式为 BSON (一种..._id 获取) const ownUser = await User.findById(ctx.params.my_id) // mongoose 自带数据类型, 使用toString()方法

    3K40

    大数据技术之_22_MongoDB学习_MongoDB 简介、下载、安装、启动、配置和关闭 + MongoDB 基本操作 + Mongoose + 使用 java 对 MongoDB 增删改查

    4.2 Mongoose 好处 • 可以为文档创建一个模式结构(Schema) • 可以对模型中对象/文档进行验证 • 数据可以通过类型转换转换为对象模型 • 可以使用中间件来应用业务逻辑挂钩 •...比 Node 原生 MongoDB 驱动更容易 4.3 新对象 mongoose 中为我们提供了几个新对象: Schema(模式对象)   • Schema 对象定义约束了数据库中文档结构。...4.4 通过 Mongoose 连接 MongoDB 1、使用 Mongoose 必须先安装 mongoose 包   npm i mongoose --save 或者   npm install mongoose...4.5 Schema--模式对象(约束对象)   使用 Mongoose 你必须经常定义模式。   模式为集合中文档定义字段和字段类型。   ...如果你数据是被结构化成支持模式,这是非常有用。   简单来说,模式就是对文档约束,有了模式文档字段必须符合模式规定。否则将不能正常操作。

    17.8K30

    Koa2+MongoDB+JWT实战--Restful API最佳实践

    最佳实践 请求设计规范 URI 使用名词,尽量使用复数,如/users URI 使用嵌套表示关联关系,如/users/123/repos/234 使用正确 HTTP 方法,如 GET/POST/PUT...拿到路由分配任务并执行 在 koa 中是一个中间件 为什么要用控制器 获取 HTTP 请求参数 Query String,如?...这两者组合没什么问题,不过 koa-multer 和 koa-route(注意不是 koa-router) 存在兼容问题。...配置更多关于 multipart 选项Object{}onError错误处理Functionfunction(){}stict严格模式,启用后不会解析 GET, HEAD, DELETE 请求Booleantrue...简单说,Mongoose就是对node环境中MongoDB数据库操作封装,一个对象模型(ODM)工具,将数据库中数据转换为JavaScript对象以供我们在应用中使用

    9.3K42
    领券