Mongoose: λͺ¨λΈ μ—…λ°μ΄νŠΈ 방법은 μœ νš¨μ„± 검사기λ₯Ό μ‘΄μ€‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2012λ…„ 04μ›” 24일  Β·  59μ½”λ©˜νŠΈ  Β·  좜처: Automattic/mongoose

model.Update λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ€ν‚€λ§ˆ μ œμ•½ 쑰건에 관계없이 λͺ¨λ“  κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ μ—΄κ±°ν˜• 속성이 μžˆλŠ” μŠ€ν‚€λ§ˆκ°€ μžˆλŠ” 경우 μ—…λ°μ΄νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—΄κ±°ν˜• μ œμ•½ 쑰건 μ™ΈλΆ€μ˜ κ°’μœΌλ‘œ λ³€κ²½ν•  수 μžˆμœΌλ―€λ‘œ 집합이 λ¬΄νš¨ν™”λ©λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈλœ 값이 κ²€μ¦λ˜μ§€ μ•Šμ€ 경우 μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

첫 번째 였λ₯˜μ—μ„œ μ’…λ£Œν• μ§€ μ—¬λΆ€λ₯Ό μ—…λ°μ΄νŠΈ 방법에 μΆ”κ°€ μ˜΅μ…˜μ„ μ œμ•ˆν•©λ‹ˆλ‹€.

new feature

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

+1

μ—…λ°μ΄νŠΈκ°€ κΈ°λ³Έκ°’, μ„€μ •μž, μœ νš¨μ„± 검사 및 μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것은 μ™„μ „νžˆ 직관적이지 μ•ŠμŠ΅λ‹ˆλ‹€. 핡심 μž‘μ—…μ΄ μŠ€ν‚€λ§ˆλ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠμœΌλ©΄ μŠ€ν‚€λ§ˆκ°€ 무슨 μ†Œμš©μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

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

잘λͺ»λœ μŠ€ν‚€λ§ˆ 경둜λ₯Ό λ¬΄μ‹œν•˜κ³  λ‚˜λ¨Έμ§€λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” strict μŠ€ν‚€λ§ˆ 섀정을 ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μƒˆ μŠ€ν‚€λ§ˆ({..}, { 엄격: true })

μŠ€ν‚€λ§ˆμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ model.update λ™μ•ˆ throwλ˜μ§€ μ•ŠλŠ” 경둜λ₯Ό μ„€μ •ν•  λ•Œ throwλ˜λŠ” 병합 λŒ€κΈ° 쀑인 μœ μ‚¬ν•œ pull μš”μ²­ 이 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ PR에 μΆ”κ°€ν•˜κ³  μ½œλ°±μ— 였λ₯˜λ₯Ό 전달해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μ‹œ ν•œ 번 μ•ˆλ…•ν•˜μ„Έμš”. λΉ λ₯Έ 닡변에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

잘λͺ»λœ 경둜λ₯Ό μ–ΈκΈ‰ν•œ 것이 μ•„λ‹ˆλΌ νŠΉμ • 경둜 λ‚΄μ—μ„œ μ œν•œν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

이 예λ₯Ό λ“€μ–΄

var μ‚¬μš©μž = μƒˆ μŠ€ν‚€λ§ˆ({
μ‚¬μš©μž 이름: {
μœ ν˜•: λ¬Έμžμ—΄,
μ†Œλ¬Έμž: μ°Έ,
트림: 사싀,
고유: 사싀
},
이름: {
μœ ν˜•: λ¬Έμžμ—΄,
트림: 사싀,
ν•„μˆ˜: 사싀,
고유: 거짓,
인덱슀: 참
},
λΉ„λ°€λ²ˆν˜Έ: {
μœ ν˜•: λ¬Έμžμ—΄,
ν•„μˆ˜: 사싀,
선택 : 거짓,
μ„ΈνŠΈ: μ•”ν˜Έν™”
},
μ—­ν• : {
μœ ν˜•: λ¬Έμžμ—΄,
"κΈ°λ³Έ": 'μ‚¬μš©μž',
"μ—΄κ±°ν˜•": ['μ‚¬μš©μž', 'κ΄€λ¦¬μž', '루트']
},
λ§Œλ“€μ–΄μ§„: {
μœ ν˜•: λ‚ μ§œ,
"κΈ°λ³Έκ°’": Date.now
}
}, { 엄격: μ°Έ });

users.update({"username" : "test"}, {"role" : "thisShowldFail"}, ν•¨μˆ˜(err, val){
...
});

이제 "test" μ‚¬μš©μžλŠ” μ—„κ²©ν•œ μŠ€ν‚€λ§ˆ μ˜΅μ…˜μ΄ ν™œμ„±ν™”λœ κ²½μš°μ—λ„ "thisShowldFail" 역할을 κ°€μ§‘λ‹ˆλ‹€.
μ—…λ°μ΄νŠΈλŠ” μ—΄κ±°ν˜• 및 기타 μœ μ‚¬ν•œ μ˜΅μ…˜μ„ μ‘΄μ€‘ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆκΉŒ?

당신이 λ§žμŠ΅λ‹ˆλ‹€. μ—΄κ±° ν˜•μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•΄μ•Όν•©λ‹ˆλ‹€. μ–΄λ”˜κ°€μ— 티켓이 μžˆλŠ” 쀄 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

+1, 이 문제둜 인해 #updateλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

.updateκ°€ μƒˆ λ¬Έμ„œ + .saveκ°€ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

  • κΈ°λ³Έκ°’
  • μ„Έν„°
  • μ‚¬μš©μž μ •μ˜ 검증
  • μ—΄κ±°

upsert μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ„

  • ν•„μˆ˜μ˜

ν˜„μž¬ μ•„λ‹˜

λ‚΄ 말은 κ΅¬ν˜„ κ°€λŠ₯/κ³„νšμ΄ ... ? :)

그것은 쒋을 수 μžˆμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ #472

+1

μ—…λ°μ΄νŠΈκ°€ κΈ°λ³Έκ°’, μ„€μ •μž, μœ νš¨μ„± 검사 및 μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것은 μ™„μ „νžˆ 직관적이지 μ•ŠμŠ΅λ‹ˆλ‹€. 핡심 μž‘μ—…μ΄ μŠ€ν‚€λ§ˆλ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠμœΌλ©΄ μŠ€ν‚€λ§ˆκ°€ 무슨 μ†Œμš©μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

+1

λ‚˜λŠ” λͺ½κ΅¬μŠ€λ₯Ό μ‚¬λž‘ν•˜μ§€λ§Œ μ—…λ°μ΄νŠΈλ₯Ό ν™•μΈν•˜μ§€ μ•ŠμœΌλ©΄ λ‚˜μ—κ²Œ 훨씬 덜 도움이 λ©λ‹ˆλ‹€. 큰 λ¬Έμ„œκ°€ μžˆλŠ”λ° 확인을 μœ„ν•΄ λ‹€μš΄λ‘œλ“œν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.

이것은 μ œκ°€ λ›°μ–΄λ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ €λŠ” 이것을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ•½κ°„μ˜ 잠수λ₯Ό ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
λͺ©ν‘œλŠ” λ‹€μŒμ„ μ–»λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • κΈ°λ³Έκ°’
  • μ„Έν„°
  • 검증
  • μ—΄κ±°
  • ν•„μˆ˜μ˜

성곡할지 확신이 μ„œμ§€ μ•Šμ§€λ§Œ μ‹œλ„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. 검증인뢀터 μ‹œμž‘ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‚΄κ²Œ ν–‰μš΄μ„ λΉŒμ–΄ 쀘!

μš©λ³‘

+1

+1

.update 검증을 μ§€μ›ν–ˆλ‹€λ©΄ μ’‹μ•˜μ„ κ²ƒμž…λ‹ˆλ‹€.

λ²”ν”„ +1

μšΈν‰λΆˆν‰ν•œ λ²”ν”„ +1

μ—…λ°μ΄νŠΈ μ‹œ μœ νš¨μ„± 검사λ₯Ό μΆ”κ°€ν•˜μ„Έμš”!

+1

νŽΈμ§‘ : -2 mongooseκ°€ μœ νš¨μ„± 검사λ₯Ό λ‹΄λ‹Ήν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— .. μœ νš¨μ„± 검사λ₯Ό μ›ν•˜λ©΄ JSON μŠ€ν‚€λ§ˆ μœ νš¨μ„± 검사 ν—ˆμš©μ„ μ‚¬μš©ν•˜λŠ” 것과 같은 λ‹€λ₯Έ 특수 라이브러리 μ‚¬μš©μ„ κ³ λ €ν•΄μ•Όν•©λ‹ˆλ‹€.

@thalesfsp λ„€. 과거에 μ‹œλ„λœ 적이 μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ— λ¬Έμ„œκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ³  μ—¬λŸ¬ μƒν™©μ—μ„œ μ€‘λ‹¨λ˜μ–΄ λ™μž‘μ΄ μΌκ΄€λ˜μ§€ μ•Šκ³  ν˜Όλž€μŠ€λŸ¬μ›Œμ§€κΈ° λ•Œλ¬Έμ— κ·œμΉ™μ΄ 맀우 λΆˆμ•ˆμ •ν•΄μ§‘λ‹ˆλ‹€.

μ˜€ν”ˆ μ†ŒμŠ€μ˜ μž₯점: κΈ°λŠ₯을 μ›ν•˜λ©΄ ν•΄λ‹Ή κΈ°λŠ₯이 μ œλŒ€λ‘œ μž‘λ™ν•¨μ„ 증λͺ…ν•˜λŠ” ν…ŒμŠ€νŠΈ 및 λ¬Έμ„œλ₯Ό ν†΅κ³Όν•˜μ—¬ ν•΄λ‹Ή κΈ°λŠ₯을 μž‘μ„±ν•˜κ³  ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μ œμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ½€ μ‹¬κ°ν•œ μ œν•œμž…λ‹ˆλ‹€. 패치λ₯Ό 좔ꡬ할 λ•Œ μœ νš¨μ„± 검사기λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ μŠ€ν‚€λ§ˆ 개체λ₯Ό 직접 ν¬λ‘€λ§ν•˜λŠ” 것이 μ‹€μš©μ μž…λ‹ˆκΉŒ? μ €λŠ” 주둜 μ—…λ°μ΄νŠΈμ— μ μš©λ˜λŠ” μ‚¬μš©μž μ •μ˜ μœ νš¨μ„± 검사기 및 μ—΄κ±°ν˜• κ·œμΉ™μ— 관심이 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œλ₯Ό μ €μž₯ν•  λ•Œ λ‹€λ₯Έ μŠ€ν‚€λ§ˆ μ œμ•½ 쑰건이 이미 μ μš©λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 및 μœ νš¨μ„± κ²€μ‚¬κΈ°λ‘œ 문제λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 것이 μ˜λ―Έκ°€ 있고 μ—…λ°μ΄νŠΈ 쀑에 λ¬Έμ„œκ°€ μžˆμ–΄μ•Ό ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆκΉŒ?

+1 λ²”ν”„, 이것은 맀우 μœ μš©ν•œ κΈ°λŠ₯이 될 κ²ƒμž…λ‹ˆλ‹€. μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•  λ•Œ μŠ€ν‚€λ§ˆμ—μ„œ μ΅œμ†Œ/μ΅œλŒ€κ°’ 등을 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λͺ½κ΅¬μŠ€κ°€ ν•  수 μžˆλŠ” 것에 λŒ€ν•΄ λ§Žμ€ μƒμš©κ΅¬ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이런 일이 μΌμ–΄λ‚˜λŠ” 것을 λ³΄λŠ” 것이 쒋을 κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ ν•΄κ²° 방법은 개체λ₯Ό μ°Ύκ³  ν•„λ“œλ₯Ό λ³€κ²½ν•œ λ‹€μŒ μ €μž₯ν•˜μ—¬ μœ νš¨μ„± 검사 미듀웨어λ₯Ό μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ¬Έμ„œμ— 따라 :

Tank.findById(id, function (err, tank) {
  tank.size = 'large';
  tank.save(function (err) {
   // Document updated, do something with it
  });
});

update λͺ…령이 Mongo에 직접 μœ„μž„λ˜κ³  전체 λ¬Έμ„œκ°€ μœ νš¨μ„± 검사λ₯Ό μœ„ν•΄ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 이것이 κΉŒλ‹€λ‘­λ‹€λŠ” 것을 μ΄ν•΄ν•©λ‹ˆλ‹€. λ”°λΌμ„œ @BrianHoldsworthκ°€ μ œμ•ˆν•œ μ ‘κ·Ό 방식은 μ—…λ°μ΄νŠΈν•  ν•„λ“œμ— λŒ€ν•΄μ„œλ§Œ μœ νš¨μ„± 검사λ₯Ό μ‹€ν–‰ν•˜λŠ” μŠ€ν‚€λ§ˆλ₯Ό ꡬ문 λΆ„μ„ν•˜λŠ” 쒋은

@aheckmann 이 패치λ₯Ό μ‹œλ„ν•˜λŠ” μ‚¬λžŒμ΄ 같은 μ‹€μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ§€ μ•Šλ„λ‘ μ΄μ „μ˜ (μ‹€νŒ¨ν•œ) κ΅¬ν˜„ λ…Έλ ₯에 λŒ€ν•΄ μ’€ 더 μžμ„Ένžˆ μ•Œλ € μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ €λŠ” 주둜 μ—…λ°μ΄νŠΈμ— μ μš©λ˜λŠ” μ‚¬μš©μž μ •μ˜ μœ νš¨μ„± 검사기 및 μ—΄κ±°ν˜• κ·œμΉ™μ— 관심이 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œλ₯Ό μ €μž₯ν•  λ•Œ λ‹€λ₯Έ μŠ€ν‚€λ§ˆ μ œμ•½ 쑰건이 이미 μ μš©λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 및 μœ νš¨μ„± κ²€μ‚¬κΈ°λ‘œ 문제λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 것이 μ˜λ―Έκ°€ 있고 μ—…λ°μ΄νŠΈ 쀑에 λ¬Έμ„œκ°€ μžˆμ–΄μ•Ό ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆκΉŒ?

@BrianHoldsworth λ‚˜λŠ” 이것이 μ§€λ‚˜μΉœ λ‹¨μˆœν™” 일 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. required: true μœ νš¨μ„± 검사 μ œμ•½ 쑰건이 μžˆλŠ” ν•„λ“œκ°€ 빈 λ¬Έμžμ—΄λ‘œ μ—…λ°μ΄νŠΈλ˜λ©΄ μ–΄λ–»κ²Œ λ©λ‹ˆκΉŒ? μœ νš¨μ„± 검사 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€λ €λ©΄ 이것이 ν•„μš”ν•©λ‹ˆλ‹€.

저도 이것에 관심이 μžˆμŠ΅λ‹ˆλ‹€. .update() λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜κ³  μœ νš¨μ„± 검사λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν”ŒλŸ¬κ·ΈμΈμ„ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? κ·Έλ ‡κ²Œ ν•˜λ©΄ 뢀뢄적인 μ†”λ£¨μ…˜λ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜λ©΄μ— 코어에 μžˆλ‹€λ©΄ λͺ¨λ“  μ’…λ₯˜μ˜ 검증을 μ²˜λ¦¬ν•˜κ³  100% 견고할 κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€.

μ‚¬μš©μž 지정 μœ νš¨μ„± 검사기와 μ—΄κ±°ν˜• λͺ¨λ‘λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 λ¬Έμ œλ„ κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. μ°ΎκΈ° 및 μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•˜λŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ λ¬Έμ„œμ— λ‹€λ₯Έ ν•˜μœ„ λ¬Έμ„œ ꡬ쑰가 μžˆλŠ” 경우 일반적인 μΌ€μ΄μŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ°κ°€ 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

+1 λ²”ν”„.

Brian의 μ†”λ£¨μ…˜μ€ κ½€ μš°μ•„ν•΄ λ³΄μž…λ‹ˆλ‹€. νŒ¨μΉ˜κ°€ 베타 버전에 λ„λ‹¬ν•˜λ©΄ μ•Œλ¦Όμ„ λ°›κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

+1

이 +1이 ν•„μš”ν•©λ‹ˆλ‹€

+1

+1

+1

+1

3.9.3μ—μ„œ update() μ—λŠ” setDefaultsOnInsert 및 runValidators 2개의 특수 μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ˜΅μ…˜μ€ 기본값을 μ„€μ •ν•˜κ³  쿼리에 λŒ€ν•œ μœ νš¨μ„± 검사기λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν…ŒμŠ€νŠΈ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. 아직 μ‹€μ œ λ¬Έμ„œκ°€ μ—†μŠ΅λ‹ˆλ‹€. :(

정말 κ°μ‚¬ν•©λ‹ˆλ‹€ - 이것은 ν›Œλ₯­ν•œ μˆ˜μ •μž…λ‹ˆλ‹€!

@vkarpov15 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ findOneAndUpdate에 μœ νš¨μ„± 검사도 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. 홍보 #2393을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μ•ˆλ…•ν•˜μ„Έμš”, μ—…λ°μ΄νŠΈμ— λŒ€ν•œ μœ νš¨μ„± 검사λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ•ˆμ • 버전 3.9κ°€ μ–Έμ œ μΆœμ‹œλ˜λŠ”μ§€ μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

감사 ν•΄μš”

@AlexandreAWE 쒋은 μ§ˆλ¬Έμž…λ‹ˆλ‹€. μ €λŠ” ν˜„μž¬ 4.0에 λŒ€ν•œ μž‘μ—…μ„ λ§ˆλ¬΄λ¦¬ν•˜κ³  3.9.x λΆ„κΈ°λ₯Ό 베타 ν…ŒμŠ€νŠΈν•˜κ³  μžˆμ§€λ§Œ μ§€κΈˆμ€ "μ™„λ£Œλ˜λ©΄ μ™„λ£Œλ  것"μž…λ‹ˆλ‹€. 크리슀마슀 전에 RCκ°€ λ‚˜μ™”μœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

@vkarpov15 3.9.x μŠ€ν…Œμ΄λΈ”μ—μ„œλŠ” μ–΄λ–»κ²Œ λ˜λ‚˜μš”? ν˜„μž¬ ν”„λ‘œμ νŠΈμ— λŒ€ν•΄ 맀번 μ°Ύμ•„ μ €μž₯ν•˜λŠ” λŒ€μ‹  μ—…λ°μ΄νŠΈμ— λŒ€ν•œ μœ νš¨μ„± 검사λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

@andrewholsted λŠ” mongodb λ“œλΌμ΄λ²„ 2.0 및 mongodb μ„œλ²„ 2.8이 μ•ˆμ •ν™”λ˜κΈ°λ₯Ό 기닀리고 μžˆμŠ΅λ‹ˆλ‹€. 이번 달에 μ§„ν–‰λ˜κΈ°λ₯Ό ν¬λ§ν•˜μ§€λ§Œ μ΅œμ‹  λ²„μ „μ˜ mongodb 및 μ΅œμ‹  λ“œλΌμ΄λ²„λ₯Ό μ§€μ›ν•˜μ§€ μ•Šκ³ λŠ” μ‹€μ œλ‘œ 4.0을 μΆœμ‹œν•  수 μ—†μŠ΅λ‹ˆλ‹€. 쑰금 더 μžμ„Έν•œ λ‚΄μš©μ€ 제 λΈ”λ‘œκ·Έ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λ‚΄κ°€ 잠재적으둜 λ©μ²­ν•œ μ§ˆλ¬Έμ΄μ§€λ§Œ μ—…λ°μ΄νŠΈλ˜λŠ” 데이터λ₯Ό κ°€μ Έμ™€μ„œ mongodb에 μ „λ‹¬ν•˜κΈ° 전에 μŠ€ν‚€λ§ˆμ— λŒ€ν•΄ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ˜ν•œ +1

ν‘œμ‹œ 및 λŒ€κΈ°

3.9κ°€ μ•ˆμ •λ  λ•ŒκΉŒμ§€ 기닀릴 수 μ—†μŠ΅λ‹ˆλ‹€ :)

이 κΈ°λŠ₯은 아직 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ? 3.9λ₯Ό κ°„μ ˆνžˆ 기닀리며.. μ›¬λ§Œν•˜λ©΄ κ°€λŠ₯ν• κΉŒμš”?

npm install mongoose@unstable λΆˆμ•ˆμ •ν•œ 버전을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 4.0의 ν˜„μž¬ ETAλŠ” 3μ›” 25μΌμž…λ‹ˆλ‹€. 이 νŽ˜μ΄μ§€ λ₯Ό ν™•μΈν•˜κΈ°μ— 쒋은 곳은

어젯밀에이 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λ§Œμ΄ μ•„λ‹ˆλΌ 닀행이닀! 이 λ³€κ²½ 사항이 μΆœμ‹œλ˜μ–΄ 맀우 κΈ°μ©λ‹ˆλ‹€. μˆ˜κ³ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

+1

이 λ¬Έμ œκ°€ μ’…λ£Œλœ κ²ƒμœΌλ‘œ ν‘œμ‹œλœ 이유λ₯Ό λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ—¬μ „νžˆ 그것을 μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ runValidatorsκ°€ true둜 μ„€μ •λœ κ²½μš°μ—λ„ 이것이 findOneAndUpdate()에 λŒ€ν•œ μ—΄κ±°ν˜• μœ νš¨μ„± κ²€μ‚¬μ—μ„œ μž‘λ™ν•˜λŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@m1cah λ‹Ήμ‹ μ΄ν•˜λ €λŠ” 일을 λ³΄μ—¬μ£ΌλŠ” 예λ₯Ό μ œκ³΅ν•˜μ‹­μ‹œμ˜€. μš°λ¦¬λŠ” 이것에 λŒ€ν•œ ν…ŒμŠ€νŠΈλ₯Ό 가지고 있으며 그듀은 ν†΅κ³Όν•©λ‹ˆλ‹€ ...

@vkarpov15 λ‚˜λŠ” 이것이 그것을 λ³΄μ—¬μ£ΌλŠ” 짧은 예라고 μƒκ°ν•©λ‹ˆλ‹€. http://code.runnable.com/VYhGbVhereIYdbst/update-validation-enum-for-mongoose-and-databases

ν•œ 가지 λ¬Έμ œλŠ” μœ„μ˜ μ˜ˆκ°€ 선사 μ‹œλŒ€ λ²„μ „μ˜ λͺ½κ΅¬μŠ€λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

root<strong i="6">@runnable</strong>:~# head node_modules/mongoose/package.json                                                                                                                 
{                                                                                                                                                                         
  "name": "mongoose",                                                                                                                                                     
  "description": "Elegant MongoDB object modeling for Node.js",                                                                                                           
  "version": "3.6.14",                                                                                                                                                    
  "author": {                                                                                                                                                             
    "name": "Guillermo Rauch",                                                                                                                                            
    "email": "[email protected]"                                                                                                                                   
  },                                                                                                                                                                      
  "keywords": [                                                                                                                                                           
    "mongodb",  

4.x둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

enum 및 findOneAndUpdate λ©”μ†Œλ“œμ™€ ν•¨κ»˜ μž‘λ™ν•œλ‹€κ³  ν™•μ‹ ν•˜μ‹­λ‹ˆκΉŒ?
mongoose 4.2.6μ—μ„œλŠ” μ‹€νŒ¨ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. 잘λͺ»λœ 값을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€ν‚€λ§ˆ:

var UserSchema = new Schema({
    first_name: {
        type: String,
        required: true,
    },
    last_name: {
        type: String,
        required: true,
    },
    email: {
        type: String,
        unique: true,
        required: true,
    },
    embededData: [{
        type: {
            type: String,
            enum: ['value1', 'value2', 'value3']
            required: true
        }
    }]
}, { strict: true });

FindOneAndUpdate λ©”μ„œλ“œ:

UserModel.findOneAndUpdate(
    {_id: uid}, 
    {$push: {embededData: data}}, 
    { runValidators: true }, function(err) {
});

그런 λ‹€μŒ embededData.type = 'Panda'; ν‘Έμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈ μœ νš¨μ„± 검사기 λ¬Έμ„œ 및 #2933 - μ—…λ°μ΄νŠΈ μœ νš¨μ„± κ²€μ‚¬κΈ°λŠ” $push μ—μ„œ μ‹€ν–‰λ˜μ§€ μ•Šκ³  $set 및 $unset μ—μ„œλ§Œ μ‹€ν–‰λ©λ‹ˆλ‹€.

+1

λ‚΄κ°€ λ³Ό 수 μžˆλŠ” ν•œ, 배열인 ν•„λ“œμ—μ„œ μ‚¬μš©μž μ •μ˜ μœ νš¨μ„± 검사기λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myTestDB');

var db = mongoose.connection;

db.on('error', function (err) {
console.log('connection error', err);
});
db.once('open', function () {
console.log('connected.');
});

var Schema = mongoose.Schema;
var userSchema = new Schema({
  _id : String,
  name : {
    type: [String],
    validate: {
        validator: function (str) {
            return str.length > 1
        }
    },
  }
});


var User = mongoose.model('User', userSchema);

User.findOneAndUpdate({"name": ["John", "Doe"]}, { 
  $setOnInsert: {
    name: ["John"],
  },
}, { runValidators: true, upsert: true, new: true }, function (err, data) {
  if (err) {
    return console.log(err);
  } else {
    // console.log(data.validateSync())
    return console.log('Updated', data);
  }
});

λ‚΄κ°€ ν¬ν•¨λœ μ‚¬μš©μž μ •μ˜ μœ νš¨μ„± 검사기가 1보닀 μž‘κ±°λ‚˜ 같은 길이의 이름 배열을 λͺ…μ‹œμ μœΌλ‘œ κΈˆμ§€ν•˜λ”λΌλ„ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•Šκ³  μ‚¬μš©μžκ°€ ["John"]의 name ν•„λ“œλ₯Ό 갖도둝 μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ νš¨μ„± 검사기 μžμ²΄λŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€. console.log(data.validateSync()) ν–‰μ˜ 주석을 μ œκ±°ν•˜μ—¬ μœ νš¨μ„± 검사λ₯Ό κ°•μ œ μ‹€ν–‰ν•˜λ©΄ μ‹€μ œλ‘œ μ μ ˆν•œ 였λ₯˜ λ©”μ‹œμ§€κ°€ λ°˜ν™˜λœλ‹€λŠ” μ‚¬μ‹€μ—μ„œ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” runValidators=true μ˜΅μ…˜μ„ ν¬ν•¨ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  이 μœ νš¨μ„± 검사가 findOneAndUpdate() 호좜 λ‚΄μ—μ„œ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

버그인 것 κ°™μŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄ λ³„λ„μ˜ 문제λ₯Ό μ—΄μ–΄μ£Όμ‹€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

예, https://github.com/Automattic/mongoose/issues/4039λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€.

감사 ν•΄μš”

μœ„ λ¬Έμ œμ— λŒ€ν•œ μˆ˜μ • 사항이 μžˆμŠ΅λ‹ˆκΉŒ? @vkarpov15

@Saravanan90 의미 μžˆλŠ” 정보 없이 μ˜€λž«λ™μ•ˆ λ‹«ν˜€

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