mongoose更新對(duì)象的兩種方法示例比較
前言
Mongoose是在node.js異步環(huán)境下對(duì)mongodb進(jìn)行便捷操作的對(duì)象模型工具
那么要使用它,首先你得裝上node.js和mongodb,關(guān)于mongodb的安裝和操作介紹可以參考:http://www.dbjr.com.cn/article/80296.htm
演示
描述場(chǎng)景
更新購(gòu)物車數(shù)量與勾選狀態(tài)
業(yè)務(wù)邏輯
查詢到當(dāng)前用戶的購(gòu)物車對(duì)象Cart,更新前端傳遞過(guò)來(lái)的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相當(dāng)于
{ 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); } // 復(fù)制對(duì)象 _.extend(cart, req.body.cart); cart.save(function(err, updatedCart) { res.send( utils.json({ data: updatedCart }) ); }); } );
對(duì)比
第一種代碼使用findOneAndUpdate只用了一步,更加簡(jiǎn)潔,適用于更新的字段少且非常明確的場(chǎng)景
第二種先f(wàn)indOne再對(duì)entity進(jìn)行save操作,利用了underscore對(duì)象復(fù)制,面向整個(gè)對(duì)象操作更加靈活,適用于字段多且不確定的場(chǎng)景
結(jié)論
需求總是在變的,所以我一般采用第二種。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章

npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org 

Node.js報(bào)錯(cuò)信息Error:?Cannot?find?module?'XXX'問(wèn)題及解

koa-router路由參數(shù)和前端路由的結(jié)合詳解

nodejs使用readline逐行讀取和寫入文件的實(shí)現(xiàn)

Node.js調(diào)用fs.renameSync報(bào)錯(cuò)(Error: EXDEV, cross-device link not

Node.js中JavaScript操作MySQL的常用方法整理

如何用nodejs給C#寫一個(gè)數(shù)據(jù)表的實(shí)體類生成工具