Mongoose: schema.pre('์ €์žฅ')๊ฐ€ MyModel.update()์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2011๋…„ 07์›” 16์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

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์— ์ง์ ‘ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  11 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์ „ ์ €์žฅ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ ์ €์žฅ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ํ›„ํฌ์ž…๋‹ˆ๋‹ค.

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์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๊ด€์‹ฌ์„ ๋Œ๊ธฐ ์œ„ํ•ด ๋ถ€๋”ช์นฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰