添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
// 执行修改操作
const task = await Task.findOneAndUpdate({_id: req.body._id}, _.pick(req.body, ['title', 'completed']),{new: true})
//findOneAndUpdate()默认返回原始的数据
//其中{_id: req.body._id}按id=req.body._id进行查询
//其中{new: true},需要将new属性设置为true,返回更新后的数据
//其中_.pick()为lodash模块中pick函数

注意:lodash模块中pick函数

lodash:是一个一致性、模块化、高性能的 JavaScript 实用工具库。
在线文档:https://www.lodashjs.com/docs/lodash.pick

调用格式:_.pick(object, *keys)

功能是:返回一个只有列入挑选key属性的对象。
其中,参数object为JSON格式的对象,*keys表示多个需要挑选出来的key属性

.save()和update()的区别

  • update比find之后save()效率高,因为这样不用读取整个文档。
  • Mongoose的update是MongoDB的update,但是Mongoose的save可能是MongoDB的插入或是update。
  • 关于save,mongoose会自动diff新文档,只更改更新部分。这有利于原子性。
  • update不能触发中间件,validation默认不能,但是可以修改。

update()和findOneAndUpdate()

  • update()返回数据处理条数
  • findOneAndUpdate()返回处理后的数据
  • 简单来说,你需要获取数据就用findOneAndUpdate(),只需要修改数据而不关注修改后数据那就用update()。

参考自:https://segmentfault.com/a/1190000009706886

原文链接:https://blog.csdn.net/u011523953/article/details/106197668 mongoose的更新数据操作: findOneAndUpdate前言正文基本语法示例结束语 在使用mongoose操作mongodb数据库时,会遇到最基本的增删改查这四个额操作,相比起来这四个操作里, ’ 改 ’ 这个操作是最复杂的,我也用花了点时间研究了一下 findOneAndUpdate 的简单使用,接下来给大家讲解一下。 Model.findOneAndUpdate([(conditions, doc, [options], [callback])] conditions 本小白前几天在项目用到mongo的findOneAndUpdate,使用过程碰到一些坑,先总结如下: db.collection.findOneAndUpdate( <filter>, <update document or aggregation pipeline>, // Changed in MongoDB 4.2 projection: <document>, sort: <document>, getattr(mg_db_write, 'fuel_bag_recharge_record').find_one_and_update( {"user_id": user_id, "product_id": product_id, "appid": appid, "valid": True}, "$set":{ "earn_end_time":{ "$cond": 远方有琴 愀然空灵 声声催天雨涓涓心事说给自己听月影憧憧 烟火几重 烛花红红尘旧梦 梦断都成空雨打湿了眼眶 年年倚井盼归堂最怕不觉泪已拆两行我在人间彷徨 寻不到你的天堂东瓶西镜放 恨不能遗忘又是清明雨上 折菊寄到你身旁把你最爱的歌来轻轻唱🎵 禾初初《清明雨上》在现代的Web应用开发数据库的读写效率和操作的原子性至关重要。MongoDB的操作因其原子性而备受青睐,它能够在单个操作查询并更新文档。那么,对于广泛使用的关系数据库MySQL,我们能否实现类似的操作呢。 需要增加一个配置项 { new: true },则可以查找后面的内容。 const updOne = await Verify.findOneAndUpdate({ _id: verify_id }, { $set: { // 认证通过,状态设置为1 state: 1, // 审核操作人 verify_user: user_id, verify_at: ... MongoDB shell 在MonogDB 的官方文档,提供的集合方法,关于修改的方法有四个:findOneAndUpdate()、update()、updateOne()、updateMany()。从字面上大家应该就可以判断出其功能了: findOneAndUpdate():修改筛选出来的文档的第一个文档,并返回,可以使用参数控制返... categoryModel.findOneAndUpdate({name:{$in:req.body.categorys}},{$inc:{total:1}},function(err){ if (err) return console.log(err); res.json({status:'ok',msg:'发布成功'}) }) ... update 已被弃用,返回{n:1, nModified:1} 返回{n:1, nModified:1} 更新一个就用updateOne,是对update的封装,不支持{multi:true}属性,加了也没用,返回{n:1, nModified:1} 返回{n:1, nModified:1} 更新多个就用updateMany,是对update的封装,自动加入了{multi:true}属性,设为... 使用mongoose的findOneAndUpdate、findAndModify两个方法,返回的数据是未更新的数据,但是库里的数据已经更新了;于是认真的查了方法定义找到了答案:说的很清楚了,new属性true返回修改后的document;false返回原始数据;总结:mongoose提供的findOneAndUpdate、findAndModify的两个方法,默认返回原始的数据,需要将new属性... 1 Fragment.findOneAndUpdate({_id:id}, {$set: datas}, {upsert:true, 'new':true}).populate('ads').exec(function(err, item) { 2 es.render('fragments/edit', {item:item, current: req.user, message:'... update比find之后save()效率高,因为这样不用读取整个文档。 MongooseupdateMongoDBupdate,但是Mongoose的save可能是MongoDB的插... 报错 :DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFindAndModify` option set to false are deprecated. See: https://mongoosejs.com/docs/deprecations.html... 使用 mongoose 的 findOneAndUpdate 方法更新文档时提示: (node:11135) DeprecationWarning: Mongoose: findOneAndUpdate() and findOneAndDelete() without the useFindAndModify option set to false are deprecated. DeprecationWarning: Mongoose:findOneAndUpdate()andfindOneAndDelete()without theuseFindAndModifyoption set to false are deprecated 官网:https://mongoosejs.com/docs/deprecations.html 入口文件加入 mongoose.s... 设置一个counter集合,每一个文档对应需要自增的集合。每当一个集合添加文档时,获取对应counter的文档,增加值,并将新值设置为新增文档的id mongoose实现: Counter.ts import mongoose from 'mongoose'; 以items集合为例: counters集合里便会有一个文档: _id:"itemId", seq_val:10 _id表示该文档对应items集合。seq_val表示当前索引 type CounterDocument