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

数组更新后Mongoose不保存记录

问题描述:数组更新后Mongoose不保存记录

答案:当使用Mongoose进行数组更新后,需要注意一些细节以确保记录得以保存。

Mongoose是一个优秀的Node.js对象模型工具,它对MongoDB进行了封装,方便开发者在Node.js环境中操作数据库。在使用Mongoose更新数组字段时,常见的问题是修改了数组但不保存记录,这是因为Mongoose在默认情况下无法检测到数组的更改。下面提供一种解决方案,以确保数组的更改能够被正确保存。

  1. 使用array.set(index, value)方法:Mongoose提供了set()方法来更新数组中指定索引位置的元素。使用该方法更新数组后,Mongoose能够检测到更改并正确保存记录。
代码语言:txt
复制
// 导入Mongoose模块
const mongoose = require('mongoose');

// 定义Schema
const schema = new mongoose.Schema({
  arrayField: [String]
});

// 创建Model
const Model = mongoose.model('Model', schema);

// 更新数组
Model.findById(id, (err, doc) => {
  if (err) {
    console.error(err);
    return;
  }

  // 使用set()方法更新数组
  doc.arrayField.set(index, value);

  // 保存记录
  doc.save((err, updatedDoc) => {
    if (err) {
      console.error(err);
      return;
    }

    console.log(updatedDoc);
  });
});
  1. 使用array.markModified(path)方法:如果在更新数组后仍然无法保存记录,可以尝试使用markModified()方法来标记字段的更改。这样,Mongoose就能正确检测到数组的更新并保存记录。
代码语言:txt
复制
// 导入Mongoose模块
const mongoose = require('mongoose');

// 定义Schema
const schema = new mongoose.Schema({
  arrayField: [String]
});

// 创建Model
const Model = mongoose.model('Model', schema);

// 更新数组
Model.findById(id, (err, doc) => {
  if (err) {
    console.error(err);
    return;
  }

  // 更新数组
  doc.arrayField = updatedArray;

  // 标记字段的更改
  doc.markModified('arrayField');

  // 保存记录
  doc.save((err, updatedDoc) => {
    if (err) {
      console.error(err);
      return;
    }

    console.log(updatedDoc);
  });
});

以上两种方法都可以解决Mongoose不保存记录的问题。根据具体的业务需求,选择适合的方法即可。

Mongoose官方文档:https://mongoosejs.com/docs/

推荐腾讯云相关产品:腾讯云数据库MongoDB,详细介绍请参考:https://cloud.tencent.com/product/mongodb

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

相关·内容

在线考试系统(vue2 + elementui + express4 + MongoDB)

---- 更新记录:2018-4-9,md5加密 win10安装mongodb window下安装mongodb,需要参考的可以移步我的博客中:win10安装mongodb 项目初始化 本次项目使用的是...初始化一条数据 如果对mongodb,mongoose没有基础的了解,建议看一看mongoose深入浅出 ,mongoose基础操作 // controllers/student.js const...,子文档数组分页模糊查询 如下图是我的student集合: 在该集合中,学生参加过的考试记录,存在exams数组中,当想实现分页查询几条数据的时候,需要用到$slice $slice:[start...怎么才能让试卷、教师、问题关联起来啊,ref的是_id,然而这些新增的数据,是保存之后才有_id的。...}) // .......................判断太长省略........................ }) }; 更新子文档数组

8.8K40
  • koa2使用注意点总结

    ctx.request.body get请求,ajax传入参数 获取的时候为ctx.request.query.参数名 koa-csrf 可以设置什么请求的时候除外,这样除外的请求就不要求必须传csrf 了 koa mongoose...Model.findById(id, function (err, doc){} id是字符串或者ObjectId格式的 mongoose 批量删除记录: Movie.remove({ _id: {...'aID', 'bID'] } }); 行内事件写方法名必须加引号 ctx.type = 'text/plain; charset=utf-8'; 发现:get请求传递参数都为字符串,如果传递的是一个数组...参数名称在后台中的格式为idArr[],nodejs不好获取,可以改为post方式传递 koa引入静态文件资源,要在app.js中用koa-static注册静态资源路径 koa-session key...其实就是值的这个session叫什么名, ctx.cookies.get() and ctx.cookies.set() 设置和获取其他cookie 浏览器cookie存储有字节限制,所以可以通过redis

    82420

    Mongoose 插件记录Node.js API日志

    本教程需要事先了解 mongoose 对象关系映射(ORM)技术【https://mongoosejs.com/】 介绍 随着程序的增长,日志记录成为跟踪所有内容的关键部分。它对于调试目的尤为重要。...现在已经有了 npm 的日志记录模块。这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...isEqual:此方法支持比较数组数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。.../app/utils/diff-plugin')) 这是 user 更新 API 的基本示例: const User = require('..

    2.8K40

    你真的了解mongoose吗?

    mul将字段值乘以指定数量unset删除指定字段,数组中的值删改为 null。...position修饰 push 操作符以指定要添加的元素在数组中的位置。slice修饰 push 操作符以限制更新数组的大小。...sort修饰 在指定的位置添加元素以更新数组字段 按照指定的规则排序 限制数组大小 存储数组 options lean: true 返回普通的 js 对象,而不是 Mongoose Documents...new: 布尔值,true 返回更新的数据,false (默认)返回更新前的数据。 fields/select:指定返回的字段。...callback 没找到数据返回 null 更新成功返回更新前的该条数据( {} 形式) options 的 {new:true},更新成功返回更新的该条数据( {} 形式) 没有查询条件,即 filter

    41.5K30

    mogoose 创建数据库并增删改查

    下载 npm i mongoose -s 连接数据库 const mongoose = require("mongoose"); mongoose.connect(dbURL); const db =...String 定义字符串 Number 定义数字 Date 定义日期 Buffer 定义二进制 Boolean 定义布尔值 Mixed 定义混合类型 ObjectId 定义对象ID Array 定义数组...添加`createdAt updatedAt`创建时间和更新时间两个字段 } ); 如果在定义了结构需要添加新字段,在实例上使用add()方法 创建表model 通过mongoose.model...Documents,向数据库中查找到的也是这种类型数据 const user = new User(userData); 保存save 获得具体的表只需要调用Model.prototype.save...}, { name: "3", email: "789@qq.com", passWord: "789" } ); res.status(200).json(users); // users是数组

    5.1K30

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

    limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?page=2&per_page=100:指定第几页,以及每页的记录数。 ?...服务器接收请求,分解 cookie,验证信息,核对成功返回 response 给客户端。...服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。 JWT 的格式大致如下: ? 它是一个很长的字符串,中间用点(.)分隔成三个部分。...安装 mongoose npm install mongoose -S 连接及配置 const mongoose = require("mongoose"); mongoose.connect(...更新用户信息 ? 删除用户 ? 最后 到这里本篇文章内容也就结束了,这里主要是结合用户模块来给大家讲述一下RESTful API最佳实践在 koa 项目中的运用。

    9.3K42

    Node.js中的MongoDB

    MongoDB的数据模型是面向文档的,类似于JSON的结构,MongoDB这个数据库中的是各种各样的BSON # MongoDB安装教程 (ps:安装好之后配置环境变量,启动MongoDB服务)...集合(collection):集合类似于数组,在集合中可以存放文档。 文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档。...此时属性名必须使用引号 db.colleges.find({'classes.core':"三大框架"}); //12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序" //$push 用于向数组中添加一个新的元素...//$addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素,则不会添加 db.colleges.update({name:"html5"},{$push:{"classes.core...--save 2.在项目中引入mongoose:let mongoose = require("mongoose"); 3.连接MongoDB数据库:mongoose.connect('mongodb

    5.3K40

    mongoose官方文档总结

    ()连接MongoDB,默认端口27017 操作缓存 就是说不必等待上面的connect连接成功,就可以使用创建的 Mongoose models 禁用缓存,要修改 bufferCommands配置...如果想更新单独一条文档并且返回给应用层,可以使用 findOneAndUpdate 方法。 六、文档-Documents Mongoose document代表着MongoDB文档的一对一映射。...,而不需要获取数据再去更新: Tank.update({_id:id},{$set:{size:‘large’}},callback) 更新我们还需要返回这个文档:findByIdAndUpdate...Mongoose子文档有两种不同的概念:子文档数组和单个嵌套子文档 const chidlSchema = new Schema({name:String}) const parentSchema...const Person = mongose.model('Person',personSchema) 我们创建了两个model,Person model中的 stories 字段为 ObjectID 数组

    20.6K40

    2021了,真的不要再说 Node.js 是一门编程语言了「建议收藏」

    const _ = require("lodash") const array = ["a", "b", "c", "d"] // chunk 对数组中的元素进行分组 // 参数一表示要进行操作的数组...3.9 查看软件包元数据 npm view mongoose npm view mongoose versions npm view mongoose dist-tags dependencies 3.10...0 3.11 删除软件包 npm uninstall npm uninstall mongoose npm un mongoose 3.12 更新软件包 通过 npm outdated 命令可以查看哪些软件包已经过期...在 package.json 文件中, 项目依赖和开发依赖要分别记录,项目依赖被记录在 dependencies 对象中,开发依赖被记录在 devDependencies 中,使开发者可以在不同的环境中下载不同的依赖软件包...发布软件包 3.16 更新版本号 在软件包的源代码发生更改, 是不能直接发布的, 应该新更新软件包的版本号然后再进行发布.

    2.4K30

    MongoDB增删改查操作

    // mongoose.Schema() 是一个构造函数,要new一个实例对象 //2、设定集合规则 const courseSchema = new mongoose.Schema({ name...find()方法 返回一组文档 // 根据条件查找文档(条件为空则查找所有文档) Course.find().then(result => console.log(result)) // 返回文档集合(数组形式...// 更新单个 User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result)) // 更新多个 User.updateMany(...{查询条件}, {要更改的值}).then(result => console.log(result)) ​ ​ // 更新单条文档 如果条件满足多个文档,也是默认只更新第一个 User.updateOne...// 关联集合 ​ const mongoose = require('mongoose'); // 连接数据库 mongoose.connect('mongodb://localhost/playground

    6.5K20
    领券