// 执行修改操作
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