欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mongoose更新对象的两种方法示例比较

程序员文章站 2022-05-04 14:54:29
前言 mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongod...

前言

mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具

那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:

演示

mongoose更新对象的两种方法示例比较

描述场景

更新购物车数量与勾选状态

业务逻辑

查询到当前用户的购物车对象cart,更新前端传递过来的quantity与selected字段

方法一

var _ = require('underscore');
cart.findoneandupdate({
 _id: req.body.cart._id,
 user: user
 }, _.pick(req.body.cart, 'quantity', 'selected'), {
 new: true
 },
 function(err, updatedcart) {
 res.send(
  utils.json({
  data: updatedcart
  })
 );
 }
);

注:_.pick相当于

 {
 quantity: req.body.cart.quantity,
 selected: req.body.cart.selected
 }

方法二

var _ = require('underscore');
cart.findone({
 _id: req.body.cart._id,
 user: user
 }, function(err, cart) {
 if (err) {
  console.log(err);
 }
 // 复制对象
 _.extend(cart, req.body.cart);
 cart.save(function(err, updatedcart) {
  res.send(
  utils.json({
   data: updatedcart
  })
  );
 });
 }
);

对比

第一种代码使用findoneandupdate只用了一步,更加简洁,适用于更新的字段少且非常明确的场景

第二种先findone再对entity进行save操作,利用了underscore对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景

结论

需求总是在变的,所以我一般采用第二种。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。