Mongoose: `_id` 없이 μ±„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2014λ…„ 12μ›” 26일  Β·  82μ½”λ©˜νŠΈ  Β·  좜처: Automattic/mongoose

API http://mongoosejs.com/docs/populate.html을 ν™•μΈν•˜κ³  μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. populate λŠ” μ™Έκ΅­ _id μ—μ„œλ§Œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. match μ˜΅μ…˜μ΄ μžˆμ–΄λ„ _id 쿼리 쑰건에 필터링 쑰건을 μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€. _id 와 κ΄€λ ¨λ˜μ§€ μ•Šμ€ ν•„λ“œλ‘œ μ±„μšΈ 방법은 μ—†μŠ΅λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œλŠ” _id λ₯Ό ObjectId둜 μœ μ§€ν•˜κ³  μžλ™ 증가 숫자둜 λ‹€λ₯Έ ν•„λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ customers λͺ¨λΈμ—λŠ” _id κ°€ 개체둜 있고 cuid κ°€ 증뢄 번호둜 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ»¬λ ‰μ…˜μ€ 단지에 μ°Έμ‘° cuid ν•˜μ§€μ— _id .

이걸 μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•  수 μžˆλ‹€λ©΄ μ–Όλ§ˆλ‚˜ μ’‹μ„κΉŒμš”?
이 κΈ°λŠ₯이 λˆ„λ½λ˜λŠ” λ””μžμΈ μ œν•œ 사항이 μžˆμŠ΅λ‹ˆκΉŒ?

enhancement

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

@rturk κ·Έ ν”ŒλŸ¬κ·ΈμΈμ΄ 정말 λ§ˆμŒμ— @alexmingoia λ‹Ήμ‹ μ˜ 생각은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λͺ¨λ“ˆμ„ λͺ½κ΅¬μŠ€ 코어에 병합? 가상을 μ‚¬μš©ν•˜μ—¬ 보닀 일반적인 μ±„μš°κΈ° (μ‹€μ œ ν•„λ“œλ₯Ό db에 μœ μ§€ν•˜μ§€ μ•Šκ³ )λ₯Ό μ²˜λ¦¬ν•œλ‹€λŠ” μ•„μ΄λ””μ–΄λŠ” 정말 κ°•λ ₯ν•©λ‹ˆλ‹€.

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

이것을 μ‚¬μš©μž μ •μ˜ν•  수 있으면 쒋겠지 _id μ§€κΈˆ λ‹Ήμž₯은

ν•˜λ‚˜μ˜ λ‹€λ₯Έ ν•„λ“œλΏλ§Œ μ•„λ‹ˆλΌ ν•„λ“œ μ§‘ν•©μ—μ„œλ„ μ±„μšΈ 수 μžˆλŠ” κΈ°λŠ₯은 샀딩을 μ μ ˆν•˜κ²Œ μ§€μ›ν•˜λŠ” 데 거의 ν•„μš”ν•˜λ©°, μ΄λŠ” μš°λ¦¬μ—κ²Œ 큰 μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, "subscription"에 λŒ€ν•œ λΆ„ν•  ν‚€λ₯Ό κ°€μ§ˆ 수 μžˆλŠ” "students" μ»¬λ ‰μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ„Ήμ…˜ λͺ¨λΈ(학생 λ°°μ—΄ 포함)μ—μ„œ 학생 데이터λ₯Ό μ±„μšΈ λ•Œ λ¬Έμ„œμ— λŒ€ν•œ ꡬ독이 μžˆμ§€λ§Œ 맀핑해야 ν•œλ‹€κ³  μ§€μ •ν•˜λŠ” λŒ€μ‹  "student"에 μ €μž₯된 _idλ₯Ό 기반으둜만 μ‘°νšŒλ©λ‹ˆλ‹€. λ¬Έμ„œ "과제" ν•„λ“œλ₯Ό ν•™μƒμ˜ "과제"둜.

그런 λ‹€μŒ μ±„μš°κΈ°λ₯Ό μˆ˜ν–‰ν•  λ•Œ μƒ€λ“œ ν‚€ 없이 쑰회λ₯Ό μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 샀딩이 μ“Έλͺ¨μ—†κ²Œ λ˜μ–΄ ν•˜λ‚˜κ°€ μ•„λ‹Œ 데이터λ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  μƒ€λ“œλ₯Ό 적쀑해야 ν•©λ‹ˆλ‹€.

이것은 μš°λ¦¬κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•  μœ„μΉ˜μ— λŒ€ν•œ 지침을 얻을 수만 μžˆλ‹€λ©΄ 개발 μžκΈˆμ„ μ§€μ›ν•˜κ±°λ‚˜ 슀슀둜 ν•  수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€. 이것은 우리 νšŒμ‚¬(GradeCam)의 μ£Όμš” μš”κ΅¬ μ‚¬ν•­μž…λ‹ˆλ‹€.

@taxilian shardKey μŠ€ν‚€λ§ˆ μ˜΅μ…˜μ„ μ„€μ •ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? AFAIK 그것이 λ°”λ‘œ κ·Έ μ˜΅μ…˜μž…λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ 해결책을 μ°Ύκ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ— 아직 μ‹œμž‘ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ±„μš°κΈ°λŠ” shardKeyλ₯Ό κ³ λ €ν•©λ‹ˆκΉŒ? λ‚΄ μ΄ν•΄λŠ” shardKeyκ°€ μ—…λ°μ΄νŠΈ 및 μ‚½μž…μ—λ§Œ 영ν–₯을 λ―ΈμΉœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ userId(예: _id) ν•„λ“œλΏλ§Œ μ•„λ‹ˆλΌ userType, userGroup λ“±μœΌλ‘œ μ±„μšΈ 수 있기λ₯Ό μ›ν•©λ‹ˆλ‹€.
감사 ν•΄μš”!

+1

+1은 맀우 μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€

여기에 +1이 λ™μΌν•©λ‹ˆλ‹€!

+1 이거 κ°–κ³ μ‹Άλ‹€

+1

+1

+1

key 와 같은 λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜μ—¬ μ±„μš°λ €λŠ” λ³€μˆ˜λ₯Ό 선택할 수 있으면 특히 μ’‹μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ author 및 comments λ§€κ°œλ³€μˆ˜λ₯Ό μ±„μš°κ³  싢은 κ²Œμ‹œλ¬Όμ΄ μžˆμ§€λ§Œ λ§€κ°œλ³€μˆ˜κ°€ μ±„μš°κΈ° 전에 λΉ„ ObjectId λ§€κ°œλ³€μˆ˜(μ‚¬μš©μž 이름 및 λŒ“κΈ€ 제λͺ©)λ₯Ό λ³΄μœ ν•˜κ³  μžˆλŠ” 경우:

{
author: "user1",
comments:["comment5", "comment6"],
title:"Post1"
}

mongoκ°€ μ‘°νšŒν•  λ§€κ°œλ³€μˆ˜λ₯Ό μ•Œ 수 μžˆλ„λ‘ "key"와 같은 λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•  수 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

Posts.find().populate([{path:"author", model:"Users", key:"username"}, {path:"comments", model:"Comments", key:"title"}])

μ΄λ ‡κ²Œ ν•˜λ©΄ author λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©μž μ΄λ¦„μœΌλ‘œ 찾은 μ‚¬μš©μžλ‘œ μ±„μš°κ³  comments λ§€κ°œλ³€μˆ˜λ₯Ό 제λͺ©μœΌλ‘œ 찾은 μ£Όμ„μœΌλ‘œ μ±„μ›λ‹ˆλ‹€(제λͺ©λ³„ 주석이 μ•½κ°„ λΉ„ν˜„μ‹€μ μ΄λΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μš”μ ).

+1

+1

+1

+1

+1

+1

+1

큰 λ™μ˜ν•©λ‹ˆλ‹€. μ‚¬μš©μž 지정 인ꡬ κ΅¬μ„±ν‘œλ₯Ό μ •μ˜ν•˜λŠ” κΈ°λŠ₯을 μ›ν•©λ‹ˆλ‹€. 파일 경둜인 ν•˜λ‚˜ μ΄μƒμ˜ ν•„λ“œκ°€ μžˆλŠ” λͺ¨λ“  μŠ€ν‚€λ§ˆμ— μ ν•©ν•˜λ―€λ‘œ μ±„μš°κΈ°κ°€ μ €μž₯μ†Œμ—μ„œ 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

이 μ½”λ“œλ₯Ό μ‹œλ„ν•˜μ‹­μ‹œμ˜€: https://github.com/alexmingoia/mongoose-populate-virtuals.

사싀, Alex의 μ½”λ“œλ₯Ό 메인 μ €μž₯μ†Œμ— λ³‘ν•©ν•˜μ§€ μ•Šκ³  이것을 핡심 κΈ°λŠ₯으둜 λ§Œλ“€ μ΄μœ κ°€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@rturk κ·Έ ν”ŒλŸ¬κ·ΈμΈμ΄ 정말 λ§ˆμŒμ— @alexmingoia λ‹Ήμ‹ μ˜ 생각은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λͺ¨λ“ˆμ„ λͺ½κ΅¬μŠ€ 코어에 병합? 가상을 μ‚¬μš©ν•˜μ—¬ 보닀 일반적인 μ±„μš°κΈ° (μ‹€μ œ ν•„λ“œλ₯Ό db에 μœ μ§€ν•˜μ§€ μ•Šκ³ )λ₯Ό μ²˜λ¦¬ν•œλ‹€λŠ” μ•„μ΄λ””μ–΄λŠ” 정말 κ°•λ ₯ν•©λ‹ˆλ‹€.

이상적일 κ²ƒμž…λ‹ˆλ‹€. Query.prototype.populate 및 기타 핡심 κΈ°λŠ₯을 μ˜€λ²„λ‘œλ“œν•˜κΈ° λ•Œλ¬Έμ— ν•΅μ‹¬μ—μ„œ 훨씬 더 μ’‹μŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μƒμ„±ν•˜λŠ” 것을 λ§‰λŠ” μœ μΌν•œ 것은 ν…ŒμŠ€νŠΈ 컀버리지가 거의 λ˜λŠ” μ „ν˜€ μ—†κ³  λ¬Έμ„œκ°€ λΆ€μ‘±ν•˜λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ—¬λŸ¬ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜κ³  있으며 μ•ˆμ •μ μ΄μ§€λ§Œ λˆ„κ΅°κ°€κ°€ ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλ₯Ό μž‘μ„±ν•œλ‹€λ©΄ λ¬Έμ„œν™”ν•΄μ•Ό ν•˜λŠ” λͺ‡ 가지 μ‚¬μ†Œν•œ λ¬Έμ œλ‚˜ 특이점이 λ“œλŸ¬λ‚  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λˆ„κ΅°κ°€κ°€ 기꺼이 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλ₯Ό λ‹€λ£° 의ν–₯이 μžˆμŠ΅λ‹ˆκΉŒ? 그렇지 μ•Šμ€ 경우 - ν•  수 μžˆμ§€λ§Œ λ‹€μŒ 달 이전에 μ°©λ₯™ν•  κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ³Όκ²Œμš”. λ‚˜λŠ” μ–΄μ¨Œλ“  μ±„μš°κΈ° λ₯Ό λ‹€μ‹œ μž‘μ„±ν•˜λ €κ³ ν–ˆμŠ΅λ‹ˆλ‹€. :)

μ½”λ“œμ— λŒ€ν•΄ 질문이 μžˆλŠ” 경우 IRC(freenode, amingoia ) λ˜λŠ” gitterμ—μ„œ μ €λ₯Ό Pingν•˜μ‹­μ‹œμ˜€.

https://github.com/whitecolor/mongoose-fill 은 λ‹€λ₯Έ λͺ¨λΈμ˜ 데이터λ₯Ό μ‚¬μš©ν•˜μ—¬ μ±„μš°κΈ°λ„ ν›Œλ₯­ν•©λ‹ˆλ‹€.

+1

+1

+1

이것은 ν•„μˆ˜μž…λ‹ˆλ‹€ :)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+3

+1

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