example.js:
var mongoose = require('mongoose')
, Schema = mongoose.Schema
mongoose.connect('mongodb://localhost/test')
var Thing = new Schema({
title : String,
content : String
})
Thing.pre('save', function(next){
console.log("saving: %s (%s)", this.title, this.content)
next()
})
var MyThing = mongoose.model('Thing', Thing)
var example = new MyThing({
title : 'foo',
content : 'bar'
})
example.save(function(err){
MyThing.update({title:'foo'},{content:'baz'}, function(err, rs){
console.log(rs)
})
})
์ฐ์ถ:
$ node example.js
saving: foo (bar)
1
์ฌ์ ์ ์ด๊ธฐ ์ ์ฅ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋์ง๋ง ์ ๋ฐ์ดํธ๋ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ์ฌ์ ์ ์ฅ์ ์ ๋ฐ์ดํธ๊ฐ ํธ์ถ๋ ๋ ๋ชจ๋ธ์ด ์๋๋ผ ์ ์ฅ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ธ์คํด์ค์์ ์คํ๋๋ ํํฌ์ ๋๋ค.
Model.update๋ฅผ ์ฌ์ฉํ๋ฉด ์์ $set ์์ ์ mongodb์ ์ง์ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ ๊ฐ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๋๋ค. ํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
๋ด๊ฐ @martindale์ ๋์ @aheckman, ๋๋ ์ ์์ UI์ ์์น๋ฅผ ์ฐ๋ฆฌ๊ฐ $.ajax
ํํ๊ฐ์ด ์ ๋ฌํ์ฌ ๊ฐ์ ์
๋ฐ์ดํธ req.body._id
ํฌ์คํธ ๊ฒฝ๋ก์ ์ฌ์ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง ์ ํ์ด ํธ๋ฆฌ ํ ๊ฒ์
๋๋ค. ์์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ ๊ฐ์ ์ซ์๋ฅผ ์ ์ถํ๊ณ ์ด๊ณ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๋ชจ๋ธ์ pre('save')
๊ฐ ์๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ์
๋๋ค.
์๋ง๋ pre('update')
๋๋ ์ด๊ฒ์ ๋ํ ์์์ฐจ๋ ธ์ผ๋ฏ๋ก ์ด๊ฒ์ด ์ถ๊ฐํ ๊ฐ์น๊ฐ ์๋ ๊ฐ์ ์ฌํญ์ผ๋ก ๊ฐ์ฃผ๋์ง ์๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ด ๊ฐ์ฒด์ updatedOn
๋ ์ง ํ๋๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ๋ ๊ฒฝ์ฐ aheckmann์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฌ๊ฐ ๋ฏธ๋ค์จ์ด ์์ค์์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋์๊ฐ ๋ฉ๋๋ค.
์ ๊ฒฝ์ฐ ๋ ์ง ์ค์ ์ ์์ง์ด๋ ๋ ์ง ๋ฐ ์๊ฐ ์ฐฝ์ ๊ธฐ๋ฐ์ผ๋ก ์
๋ฐ์ดํธ๋ ๋ฌธ์๋ฅผ ๋ก๋ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ์ด mongodb์ ์ปค๋ฐ๋๋ ์๊ฐ์ ๋งค์ฐ ๋ฏผ๊ฐํฉ๋๋ค. ๋ง์ ์๊ฐ ๋๋ฆฌํํธ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์๋์ง๋ง pre('update')
๋ํ aheckmann์ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฅ์ด ๋ฐ์ํ ๋๊น์ง ๋ ๋ง์ ๋๋ฆฌํํธ๋ฅผ ํฌํจํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ฌ๊ธฐ์์ ์ผ๋ถ ๋ฏธ๋ค์จ์ด ์ต์ ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๋๋ pre('save')๊ฐ ์๋ฏธ์์ผ๋ก ๋์๊ฒ ์ ์ฅ์ฒ๋ผ ๋ณด์ด๋ ์ ๋ฐ์ดํธ๋ฅผ ํฌ์ฐฉํ์ ๊ฒ์ด๋ผ๊ณ ์์ํ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ๋๋ฌด ์ผ๋ฐ์ ์ด๋ฏ๋ก ์ ์ฅ ํํฌ์ ๊ฐ์น๊ฐ ํจ์ฌ ๋จ์ด์ง๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ฌ์ ํ ์ด๊ฒ์๋ณด๊ณ ์๋์ง ํ์คํ์ง ์์ง๋ง Mongoose ๋ฌธ์๋ฅผ ์ดํด๋ณด๊ณ ์์ต๋๋ค.
๋ชฝ๊ตฌ์ค
_findAndUpdate()_ ์น์
์ ๋ํ ์ฐธ๊ณ ์ฌํญ์์ ์ด๊ฒ์ด ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์ค๋ช
ํ๋
์ด๊ฑด ๋น์ด๋จน์ ํ์๋ฆฌ์ผ. setter์์ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ํ ์ ์์ต๋๋ค. ๋ฐ๋ณด.
์ด๊ฒ์ ์ ๋ง ์ค๋๋ ์ค๋ ๋์ด์ง๋ง ๊ด์ฐฎ์ต๋๋ค. ์ค์ ๋ก ์ด๊ฒ์ ๋ฐฉํดํ๊ฑฐ๋ ๊ฒ์๋ฌผ ์ดํ๋ก ํ์ ๋ ์ฌ์ ์ด ์์ต๋๋ค.
๋ชจ๋ ์ข์ ์ถ์ธ์ ๋๋ค. findById๋ฅผ ๋ง๋ ๋ค์ ํ์ ์ ์ฅ์ ํ๋๋ก ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์๊ธ์ ์ ์ด๋ ์ฌ์ ์ ์ฅ ํํฌ๊ฐ ์ฌ์ ํ ์๋ํ๋๋ก ํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ์ถ์ธกํฉ๋๋ค. ์ฌ์ ์ ๋ฐ์ดํธ ํํฌ๋ ์์ผ๋ฉด ์ข๊ฒ ์ง ๋ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ isModifed๋ก ๋ณ๊ฒฝ๋์๋์ง ํ์ธํด์ผํ๋ฏ๋ก ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ ํ ๋ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
#964์ ํ๊ทธ๋ฅผ ์ง์ ํ๊ณ ๊ด์ฌ์ ๋๊ธฐ ์ํด ๋ถ๋ช์นฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ์ฌ์ ์ ์ฅ์ ์ ๋ฐ์ดํธ๊ฐ ํธ์ถ๋ ๋ ๋ชจ๋ธ์ด ์๋๋ผ ์ ์ฅ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ธ์คํด์ค์์ ์คํ๋๋ ํํฌ์ ๋๋ค.
Model.update๋ฅผ ์ฌ์ฉํ๋ฉด ์์ $set ์์ ์ mongodb์ ์ง์ ๋ณด๋ผ ์ ์์ต๋๋ค.