Mongoose: FindOne은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν•„λ“œμ˜ 기본값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 07μ›” 23일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: Automattic/mongoose

_첫 번째: 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν•΄κ²° 방법:_
Model.findOne({id: 'blabla'}).select('email password createdAt').lean().exec()

문제:

createdAt μ—μ„œ 만료(TTL 24h ) 및 κΈ°λ³Έ( Date.now ) 값이 μžˆλŠ” Users λ₯Ό μ‚¬μš©ν•˜μ—¬ 생성 μƒˆλ‘œ μƒμ„±λœ μ‚¬μš©μžμ˜ λ‚ μ§œ μ •λ³΄μž…λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ 계정을 ν™œμ„±ν™”ν•˜λ©΄ μ‹œμŠ€ν…œμ—μ„œ createdAt ν•„λ“œλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
μ‚¬μš©μžκ°€ 계정을 ν™œμ„±ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ μ‹œμŠ€ν…œμ€ 24μ‹œκ°„ 후에 Users μ»¬λ ‰μ…˜μ—μ„œ 계정을 μ œκ±°ν•©λ‹ˆλ‹€.

λ‚΄ 인증 μž‘μ—…μ—μ„œ λ‚˜λŠ” λ¨Όμ € createdAt ν•„λ“œμ˜ 쑴재λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
μ‚¬μš©μžκ°€ ν™œμ„±ν™”λ˜μ§€ μ•Šμ€ 경우 Account is not activated. 와 같은 λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

μœ„μ˜ 인증 절차λ₯Ό μœ„ν•΄ FindOne 방법을 μ‹œλ„ν•˜λ©΄ μ‚¬μš©μžκ°€ μžμ‹ μ˜ 계정을 ν™œμ„±ν™”ν–ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ„œμ— createdAt ν•„λ“œκ°€ μ—†μ§€λ§Œ Date.now 값을 μ–»μŠ΅λ‹ˆλ‹€. .

λ‚΄ User λͺ¨λΈμ˜ createdAt ν•„λ“œ:
createdAt: { type: Date, expires: '24h', default: Date.now },

λ‚΄ 방법:
Users.findOne({email: username}, 'email, password, createdAt', function(err, user) {

μœ„μ˜ 방법을 μ‚¬μš©ν•˜λ©΄ createdAt 값이 맀번 λ°˜ν™˜λ©λ‹ˆλ‹€.

μΆ”μ‹ : 문제λ₯Ό κ²€μƒ‰ν–ˆμ§€λ§Œ 아무 것도 ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
@ vkarpov15 그런 μ‹μœΌλ‘œ μž‘λ™ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. μ €μž₯ν•  λ•Œ 기본값이 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ λ¬Έμ„œκ°€ find 일 λ•Œ μ„€μ •ν•˜λŠ” 것은 μ‹€μ œλ‘œλŠ” DB에 μ €μž₯된 μ •ν™•ν•œ 데이터λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ˜€ν•΄μ˜ μ†Œμ§€κ°€ μžˆμ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 문제λ₯Ό μž¬κ°œν•˜λŠ” 데 νˆ¬ν‘œν•  κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

이것이 λ°”λ‘œ 기본값이 μž‘λ™ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. λ¬Έμ„œμ— createdAt ν•„λ“œκ°€ μ—†μœΌλ©΄ λͺ½κ΅¬μŠ€κ°€ ν•„λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μƒˆ λ¬Έμ„œλ₯Ό λ§Œλ“€ λ•Œ createdAt 만 μΆ”κ°€ν•˜λ €λŠ” 경우:

schema.pre('save', function(next) {
  if (this.isNew) {
    this.createdAt = Date.now();
  }
  next();
});

λ˜ν•œ Users.findOne({email: username}, 'email, password, createdAt' /** <-- remove commas here */) ν”„λ‘œμ μ…˜μ˜ ν•„λ“œλ₯Ό μ‰Όν‘œλ‘œ κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
@ vkarpov15 그런 μ‹μœΌλ‘œ μž‘λ™ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. μ €μž₯ν•  λ•Œ 기본값이 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ λ¬Έμ„œκ°€ find 일 λ•Œ μ„€μ •ν•˜λŠ” 것은 μ‹€μ œλ‘œλŠ” DB에 μ €μž₯된 μ •ν™•ν•œ 데이터λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ˜€ν•΄μ˜ μ†Œμ§€κ°€ μžˆμ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 문제λ₯Ό μž¬κ°œν•˜λŠ” 데 νˆ¬ν‘œν•  κ²ƒμž…λ‹ˆλ‹€.

λ°˜λ“œμ‹œ 그런 것은 μ•„λ‹ˆμ§€λ§Œ, λͺ½κ΅¬μŠ€λŠ” λ¬Έμ„œκ°€ db에 μ €μž₯된 μ •ν™•ν•œ 데이터λ₯Ό λ‚˜νƒ€λ‚΄μ§€ μ•ŠλŠ” 곳이 λ§ŽμŠ΅λ‹ˆλ‹€: getter, virtuals, λ“±λ“±. μ–΄λŠ μͺ½μ΄λ“ , μš°λ¦¬λŠ” 이 λ™μž‘μ„ μ£Όμž₯ν•˜κ³  그것을 λ³€κ²½ν•˜λ©΄ λ§Žμ€ μ‚¬λžŒλ“€μ˜ μ½”λ“œκ°€ 손상될 κ²ƒμž…λ‹ˆλ‹€. λ³€κ²½ μš”κ΅¬κ°€ λ§Žμ§€ μ•ŠλŠ” ν•œ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

createdAt: {
  type: Date,
  default: function() {
    if (this.isNew) { return new Date(); }
    return undefined;
  }
}

이것은 κ·Έλž˜μ„œ 그것을 λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€ createdAt λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” κ²½μš°μ—λ§Œ μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ 수 μžˆμŠ΅λ‹ˆλ‹€ undefined 당신은 DBμ—μ„œ λ¬Έμ„œλ₯Όλ‘œλ“œν•˜λŠ” 경우 createdAt μ•„λ‹ˆλ‹€ μ„ΈνŠΈ.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰