db.collection.createIndexes()
์ด ํ์ด์ง์ ๋ด์ฉ
- ์ ์
- ํธํ์ฑ
- Stable API
- ์ต์
- ๋ชจ๋ ์ธ๋ฑ์ค ์ ํ์ ๋ํ ์ต์
- ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์
text
์ธ๋ฑ์ค์ ๋ํ ์ต์ 2dsphere
์ธ๋ฑ์ค์ ๋ํ ์ต์ 2d
์ธ๋ฑ์ค์ ๋ํ ์ต์ wildcard
์ธ๋ฑ์ค์ ๋ํ ์ต์ - ๋์
- ๊ธฐ์กด ์ธ๋ฑ์ค ๋ค์ ๋ง๋ค๊ธฐ
- ์ธ๋ฑ์ค ์ต์
- ์์ผ๋์นด๋ ์ธ๋ฑ์ค
- ํธ๋์ญ์
- ์์
- ์ต์ ์์ด ์ธ๋ฑ์ค ์์ฑ
- ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ฌ ์ธ๋ฑ์ค ์์ฑํ๊ธฐ
- ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
- ์ฟผ๋ผ ์ปค๋ฐ์ผ๋ก ์ธ๋ฑ์ค ์์ฑ
- ์ฌ๋ฌ ์ธ๋ฑ์ค ์์ฑ
- ์ถ๊ฐ ์ ๋ณด
๋๋ผ์ด๋ฒ๊ฐ ํฌํจ๋ MongoDB
์ด ํ์ด์ง์์๋ mongosh
๋ฉ์๋๋ฅผ ์ค๋ช
ํฉ๋๋ค. MongoDB ๋๋ผ์ด๋ฒ์์ ํด๋น ๋ฉ์๋๋ฅผ ๋ณด๋ ค๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํด๋น ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์
db.collection.createIndexes( [ keyPatterns ], options, commitQuorum )
์ปฌ๋ ์ ์ ํ๋ ์ด์์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.
์ธ๋ฑ์ค ๋น๋๊ฐ ๋ณต์ ๋ณธ ์ธํธ์ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ ค๋ฉด ๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ๋กค๋ง ์ธ๋ฑ์ค ๋น๋์ ์ค๋ช ๋ ๋กค๋ง ์ธ๋ฑ์ค ๋น๋ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ธ์.
db.collection.createIndexes()
๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.Parameter์ ํ์ค๋ชkeyPatterns
๋ฌธ์
์ธ๋ฑ์ค ์ฌ์ ๋ฌธ์๊ฐ ํฌํจ๋ ๋ฐฐ์ด์ ๋๋ค. ๊ฐ ๋ฌธ์์๋ ํ๋์ ๊ฐ ์์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ํ๋๋ ์ธ๋ฑ์ค ํค์ด๊ณ ๊ฐ์ ํด๋น ํ๋์ ์ธ๋ฑ์ค ์ ํ์ ์ค๋ช ํฉ๋๋ค. ํ๋์ ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ
1
๊ฐ์ ์ง์ ํ๊ณ , ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ-1
๊ฐ์ ์ง์ ํฉ๋๋ค.MongoDB๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ธ๋ฑ์ค ์ ํ์ ์ง์ํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ธ๋ฑ์ค ์ ํ์ ์ฐธ์กฐํ์ธ์.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉ์ ์ง์ ํ๋ ๋๋ ์ปฌ๋ ์ ์ ๋ค์ํ ํ๋์ ๋ํด ์ฟผ๋ฆฌํ๋ ์ํฌ๋ก๋๋ฅผ ์ง์ํฉ๋๋ค.
ํน์ ํ๋์ ํด๋น ํ์ ๊ฒฝ๋ก ๋๋ ๋ฌธ์์ ๋ชจ๋ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ณตํฉ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
options
๋ฌธ์
์ ํ ์ฌํญ. ์ธ๋ฑ์ค ์์ฑ์ ์ ์ดํ๋ ์ค์ ํ๋ค ์ ์ต์ ์ด ํฌํจ๋ ๋ฌธ์ ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ต์ ์ ์ฐธ์กฐํ์ธ์.
์ ์ ๋๋ ๋ฌธ์์ด
์ ํ ์ฌํญ์ ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ ๋ฑ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ํฌํ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ์ต์ ์(์ฆ, ์ฟผ๋ผ ์ปค๋ฐ)์ด๋ฉฐ, ์ด๋ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ
indexes
์(๋ฅผ) ์ค๋น๋จ์ผ๋ก ํ์ํ๊ธฐ ์ ์ ์ฑ๊ณต์ ์ธ ์ธ๋ฑ์ค ๋น๋๋ฅผ ๋ณด๊ณ ํด์ผ ํฉ๋๋ค. 'ํฌํ' ๋ฉค๋ฒ๋members[n].votes
์ด(๊ฐ)0
๋ณด๋ค ํฐ ๋ชจ๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ๋๋ค.๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ง์ํฉ๋๋ค.
"votingMembers"
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๋ ํฌํ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ(๊ธฐ๋ณธ๊ฐ)์ ๋๋ค."majority"
- ๋ฐ์ดํฐ ๋ณด์ ํฌํ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ๋จ์ ๊ณผ๋ฐ์์ ๋๋ค.<int>
- ํน์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๋ ํฌํ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ๋๋ค.0
- ์ฟผ๋ผ ํฌํ ๋์์ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ํฉ๋๋ค. ๋ฉค๋ฒ๋ ์ธ๋ฑ์ค ์์ฑ์ ๋์์ ์์ํ์ง๋ง ์ธ๋ฑ์ค ์์ฑ์ ์๋ฃํ๊ธฐ ์ ์ ํฌํํ๊ฑฐ๋ ์ฟผ๋ผ์ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค. ์ฟผ๋ผ ์ปค๋ฐ์ด0
์ธ ์ธ๋ฑ์ค ๋น๋๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ ๋์ค์setIndexCommitQuorum
๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ผ ์ปค๋ฐ์ ์์ ํ ์ ์์ต๋๋ค.๋ณต์ ๋ณธ ์ธํธ ํ๊ทธ ์ด๋ฆ.
ํธํ์ฑ
์ด ๋ฉ์๋๋ ๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
์ฐธ๊ณ
์ด ๋ช ๋ น์ ๋ชจ๋ MongoDB Atlas ํด๋ฌ์คํฐ์์ ์ง์๋ฉ๋๋ค. ๋ชจ๋ ๋ช ๋ น์ ๋ํ Atlas ์ง์์ ๊ดํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ญ์์ค.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
Stable API
Stable API V1์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
options
๋ฌธ์์๋ ๋ค์ ํ๋ ์ค ์ด๋ ๊ฒ๋ ์ง์ ํ ์ ์์ต๋๋ค.background
bucketSize
sparse
storageEngine
geoHaystack ๋๋ ํ ์คํธ ์ธ๋ฑ์ค๋ ์์ฑํ ์ ์์ต๋๋ค.
์์ ์ง์๋์ง ์๋ ์ธ๋ฑ์ค ์ ํ์ ์๊ฒฉ ๋ชจ๋ ์์ ์ฟผ๋ฆฌ ํ๋๋ ์ ์ํด ๋ฌด์๋ฉ๋๋ค. ์๋ฅผ ์์
sparse
์ธ๋ฑ์ค ๋ฅผcursor.hint()
์ ํจ๊ป ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์BadValue
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.planner returned error :: caused by :: hint provided does not correspond to an existing index
์ต์
options
๋ฌธ์์๋ ์ธ๋ฑ์ค ์์ฑ์ ์ ์ดํ๋ ์ต์
์งํฉ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ธ๋ฑ์ค ์ ํ์ ๋ฐ๋ผ ํด๋น ์ ํ์ ๋ง๋ ์ถ๊ฐ ์ต์
์ด ์์ ์ ์์ต๋๋ค.
๋์ผํ ๋ฌธ์์ ์ฌ๋ฌ ์ธ๋ฑ์ค ์ต์
์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ์ต์
๋ฌธ์๋ฅผ ์ง์ ํ๋ฉด db.collection.createIndexes()
์์
์ด ์คํจํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ db.collection.createIndexes()
์ฐ์ฐ์ ๊ณ ๋ คํด ๋ณด์ธ์.
db.collection.createIndexes( [ { "a": 1 }, { "b": 1 } ], { unique: true, sparse: true, expireAfterSeconds: 3600 } )
์ต์
์ฌ์์ด ์ฌ๋ฌ ๋ฌธ์๋ก ๋ถํ ๋ ๊ฒฝ์ฐ(์: { unique: true }, { sparse: true, expireAfterSeconds: 3600 }
) ์ธ๋ฑ์ค ์์ฑ ์์
์ ์คํจํ๊ฒ ๋ฉ๋๋ค.
์ค์
์ต์
์ db.collection.createIndexes()
๋ก ์ง์ ํ๋ฉด ์ง์ ๋ ๋ชจ๋ ์ธ๋ฑ์ค์ ์ต์
์ด ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์
์ ์ง์ ํ๋ฉด ์์ฑ๋ ๋ชจ๋ ์ธ๋ฑ์ค์ ํด๋น ๋ฐ์ดํฐ ์ ๋ ฌ์ด ํฌํจ๋ฉ๋๋ค.
db.collection.createIndexes()
์(๋) ํธํ๋์ง ์๋ ์ต์
์ด๋ ์ธ์๊ฐ ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ต์
์ค๋ช
์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ์ธ๋ฑ์ค ์ ํ์ ๋ํ ์ต์
๋ค์ ์ต์ ์ ๋ฌ๋ฆฌ ์ง์ ๋์ง ์๋ ํ ๋ชจ๋ ์ธ๋ฑ์ค ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Parameter | ์ ํ | ์ค๋ช
| |
---|---|---|---|
| ๋ถ์ธ | ์ ํ ์ฌํญ. ๊ณ ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ฉด ํด์๋ ์ธ๋ฑ์ค์๋ ์ด ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. | |
| ๋ฌธ์์ด | ์ ํ ์ฌํญ. ์ธ๋ฑ์ค์ ์ด๋ฆ์ ๋๋ค. ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ MongoDB๋ ์ธ๋ฑ์ฑ๋ ํ๋์ ์ด๋ฆ๊ณผ ์ ๋ ฌ ์์๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ธ๋ฑ์ค ์ด๋ฆ์ ์์ฑํฉ๋๋ค. ์ ์ง์ ๋ ์ต์
์ ํค ํจํด ๋ฐฐ์ด ์ ํฌํจ๋ ๋ชจ๋ ์ธ๋ฑ์ค | |
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ง์ ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ ํํฐ ํํ์๊ณผ ์ผ์นํ๋ ๋ฌธ์๋ง ์ฐธ๊ณ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ถ๋ถ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ์ธ์. ํํฐ ํํ์์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค.
๋ชจ๋ MongoDB ์ธ๋ฑ์ค ์ ํ์ | |
| ๋ถ์ธ | ์ ํ ์ฌํญ. ๋ค์ ์ธ๋ฑ์ค ์ ํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๋ฐํ๋ฉฐ ์ด ์ต์ ์ ๋ฌด์ํฉ๋๋ค.
๋ถ๋ถ ์ธ๋ฑ์ค๋ sparse index ๊ธฐ๋ฅ์ ์์ ์งํฉ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ sparse index ๋์ ๋ถ๋ถ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ธ์. | |
| integer | ์ ํ ์ฌํญ. MongoDB๊ฐ ์ด ์ปฌ๋ ์ ์ ๋ฌธ์๋ฅผ ๋ณด๊ดํ๋ ๊ธฐ๊ฐ์ ์ ์ดํ๊ธฐ ์ํด TTL(Time To Live)๋ก ์ด ๋จ์์ ๊ฐ์ ์ง์ ํฉ๋๋ค. ์ด ์ต์ ์ TTL ์ธ๋ฑ์ค์๋ง ์ ์ฉ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ TTL์ ์ค์ ํ์ฌ ์ปฌ๋ ์ ์์ ๋ฐ์ดํฐ ๋ง๋ฃํ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์. MongoDB 5.0 ์ด์ ์ ์์ฑ๋ TTL ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ MongDB 5.0์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ 5.0 ์ด์ ์ค์น์ ๋๊ธฐํํ๋ ค๋ ๊ฒฝ์ฐ ์๋ชป๋ ๊ตฌ์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด NaN์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ์ธ์. TTL ์ธ๋ฑ์ค | |
๋ถ์ธ | ์ ํ ์ฌํญ์ ๋๋ค. ์ฟผ๋ฆฌ ํ๋๋์์ ์ธ๋ฑ์ค๋ฅผ ์จ๊ธธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ์ ๋๋ค. ์จ๊ฒจ์ง ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ๊ณํ ์ ํ์ ์ผ๋ถ๋ก ํ๊ฐ๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ | ||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ฌ์ฉ์๊ฐ ์์ฑ๋ ์ธ๋ฑ์ค์ ๋ํ ์คํ ๋ฆฌ์ง ์์ง์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๋ ์ง์ ํ ์คํ ๋ฆฌ์ง ์์ง ๊ตฌ์ฑ ์ต์ ์ ๋ค๋ฅธ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ๋ฉค๋ฒ๊ฐ ์๋ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ณต์ ์ค์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋๊ณ oplog์ ๊ธฐ๋ก๋ฉ๋๋ค. |
๋ฐ์ดํฐ ์ ๋ ฌ ์ต์
Parameter | ์ ํ | ์ค๋ช
| ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ๋ฌธ์ | ์ ํ ์ฌํญ์ ๋๋ค. ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค. collection ์์ค์์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๊ฒฝ์ฐ:
๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๋ |
๋ค์ ์ธ๋ฑ์ค๋ ๋จ์ ๋ฐ์ด๋๋ฆฌ ๋น๊ต๋ง ์ง์ํ๋ฉฐ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ํ์ง ์์ต๋๋ค.
ํ
๋จ์ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ปฌ๋ ์
์ text
๋๋ 2d
์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๋ {collation:
{locale: "simple"} }
๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ ์ ๋ ฌ ๋ฐ ์ธ๋ฑ์ค ์ฌ์ฉ
collection ์์ค์์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๊ฒฝ์ฐ:
์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ง ์์ผ๋ฉด MongoDB๋ collection์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ฉด MongoDB๋ ์ง์ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
ํ
1
๋๋ 2
์ ๋ฐ์ดํฐ ์ ๋ ฌ strength
๋ฅผ ์ง์ ํ๋ฉด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. 1
์ ๋ฐ์ดํฐ ์ ๋ ฌ strength
๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค๋ ๋ฐ์ ๊ตฌ๋ณ ๋ถํธ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
๋์ผํ ํค์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํค ํจํด์ ๊ฐ์ง๋ง ๋ฐ์ดํฐ ์ ๋ ฌ์ด ๋ค๋ฅธ ๊ณ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ๊ณ ์ ํ ์ธ๋ฑ์ค ์ด๋ฆ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
๋ฌธ์์ด ๋น๊ต์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์ ์์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ์ฆ, ์์ ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ฑ๋ ํ๋์์ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํํ๋ ์์ ์ ์ง์ํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
๋ฐ์ดํฐ ์ ๋ ฌ๋ก ๊ตฌ์ฑ๋ ์ธ๋ฑ์ค๋ ICU ๋ฐ์ดํฐ ์ ๋ ฌ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ ์์๋ฅผ ์ง์ ํ๋ฏ๋ก, ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ๋ ฌ ์ธ์ ์ธ๋ฑ์ค ํค๊ฐ ์ธ๋ฑ์ค ํค๋ณด๋ค ํด ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ปฌ๋ ์
myColl
์๋ ๋์กฐ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ์ด "fr"
์ธ ๋ฌธ์์ด ํ๋ category
์ ๋ํ ์์ธ์ด ์์ต๋๋ค.
db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )
์ธ๋ฑ์ค์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ ๋ค์ ์ฟผ๋ฆฌ ์์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )
ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก '๋จ์' ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ ๋ ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋ค์ ์ฟผ๋ฆฌ ์์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
db.myColl.find( { category: "cafe" } )
์ธ๋ฑ์ค ์ ๋์ฌ ํค๊ฐ ๋ฌธ์์ด, ๋ฐฐ์ด ๋ฐ ๋ด์ฅ๋ ๋ฌธ์๊ฐ ์๋ ๋ณตํฉ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ ์์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค ์ ๋์ฌ ํค์ ๋ํ ๋น๊ต๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ปฌ๋ ์
myColl
์๋ ์ซ์ ํ๋ score
๋ฐ price
์ ๋ฌธ์์ด ํ๋ category
์ ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค. ์ธ๋ฑ์ค๋ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํด ๋ฐ์ดํฐ ์ ๋ ฌ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ "fr"
์ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ง๋๋ค.
db.myColl.createIndex( { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } )
๋ฌธ์์ด ๋น๊ต์ "simple"
์ด์ง ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๋ค์ ์์
์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
db.myColl.find( { score: 5 } ).sort( { price: 1 } ) db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )
์์ธ์ด ์์ฑ๋ category
ํ๋์ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํด "simple"
์ด์ง ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๋ค์ ์์
์ ์์ธ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ์ score: 5
๋ถ๋ถ๋ง ์ํํ ์ ์์ต๋๋ค.
db.myColl.find( { score: 5, category: "cafe" } )
์ค์
๋ด์ฅ๋ ๋ฌธ์ ํค๋ฅผ ๋น๋กฏํ ๋ฌธ์ ํค์์ ์ผ์น๋ ๋จ์ ์ด์ง ๋น๊ต๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฆ, "foo.bรกr"์ ๊ฐ์ ํค์ ๋ํ ์ฟผ๋ฆฌ๋ "foo.bar" ํค์ ์ผ์นํ์ง ์์ต๋๋ค. ์ด๋ ๊ฐ๋ ๋งค๊ฐ๋ณ์์ ์ค์ ํ ๊ฐ์ ๊ด๊ณ์์ด ์ ์ฉ๋ฉ๋๋ค.
์ธ๋ฑ์ค์ ๋ํ text
์ต์
๋ค์ ์ต์ ์ ํ ์คํธ ์ธ๋ฑ์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
Parameter | ์ ํ | ์ค๋ช
|
---|---|---|
| ๋ฌธ์ | ์ ํ ์ฌํญ. ํ
์คํธ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ํ๋ ๋ฐ ๊ฐ์ค์น ์์ ํฌํจํ๋ ๋ฌธ์์
๋๋ค. ๊ฐ์ค์น๋ 1~99,999 ๋ฒ์์ ์ ์์ด๋ฉฐ, ์ธ๋ฑ์ฑ๋ ๋ค๋ฅธ ํ๋์ ๋ํ ํด๋น ํ๋์ ์ค์๋๋ฅผ ์ ์ ์ธก๋ฉด์์ ๋ํ๋
๋๋ค. ์ธ๋ฑ์ฑ๋ ์ผ๋ถ ํ๋ ๋๋ ๋ชจ๋ ํ๋์ ๊ฐ์ค์น๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ ์๋ฅผ ์กฐ์ ํ๋ ค๋ฉด ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์์ ํ
์คํธ ๊ฒ์ ๊ฒฐ๊ณผ์ ๊ฐ์ค์น ํ ๋นํ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์. ๊ธฐ๋ณธ๊ฐ์ MongoDB 5.0๋ถํฐ ๊ฐ์ค์น ์ต์ ์ ํ ์คํธ ์ธ๋ฑ์ค์๋ง ํ์ฉ๋ฉ๋๋ค. |
| ๋ฌธ์์ด | ์ ํ ์ฌํญ. ํ
์คํธ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ด ์ธ์ด๋ ์ค์ง ๋จ์ด ๋ชฉ๋ก๊ณผ ์ด๊ฐ ๋ฐ ํ ํฌ๋์ด์ ์ ๋ํ ๊ท์น์ ๊ฒฐ์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ๊ณผ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด์ ๋ํ ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์ ํ
์คํธ ๊ฒ์ ์ธ์ด ๋ฐ ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์ ํ
์คํธ ์ธ๋ฑ์ค์ ๋ํ ๊ธฐ๋ณธ ์ธ์ด ์ง์ ์ ์ฐธ์กฐํ์ธ์. ๊ธฐ๋ณธ๊ฐ์ |
| ๋ฌธ์์ด | ์ ํ ์ฌํญ์
๋๋ค. ํ
์คํธ ์ธ๋ฑ์ค์์ ์ปฌ๋ ์
๋ฌธ์์ ํ๋ ์ด๋ฆ์ผ๋ก, ๋ฌธ์์ ์ฌ์ ์ ์ธ์ด๋ฅผ ํฌํจํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ |
| integer | ์ ํ ์ฌํญ. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒ์ ์ ์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์ ๋ํ ํ ์คํธ ์ธ๋ฑ์ค ๋ฒ์ ์ ์ฐธ์กฐํ์ธ์. |
์ธ๋ฑ์ค์ ๋ํ 2dsphere
์ต์
๋ค์ ์ต์ ์ 2Ddsphere ์ธ๋ฑ์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
Parameter | ์ ํ | ์ค๋ช
|
---|---|---|
| integer | ์ ํ ์ฌํญ. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒ์ ์ 2dsphere ์ธ๋ฑ์ค๋ฅผ ์ฐธ๊ณ ํ์ธ์. |
์ธ๋ฑ์ค์ ๋ํ 2d
์ต์
๋ค์ ์ต์
์ 2d
์ธ๋ฑ์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
Parameter | ์ ํ | ์ค๋ช
|
---|---|---|
| integer | ์ ํ ์ฌํญ์
๋๋ค.
|
| ์ซ์ | ์ ํ ์ฌํญ. |
| ์ซ์ | ์ ํ ์ฌํญ. |
์ธ๋ฑ์ค์ ๋ํ wildcard
์ต์
๋ค์ ์ต์ ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
Parameter | ์ ํ | ์ค๋ช
| |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ๋ฌธ์ | ์ ํ ์ฌํญ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค์์ ํน์ ํ๋ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๊ฑฐ๋ ์ ์ธํ ์ ์์ต๋๋ค. ์ด ์ต์
์ ๋ชจ๋ ๋ฌธ์ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ง ์ ํจํฉ๋๋ค. ํน์ ํ๋ ๊ฒฝ๋ก ๋ฐ ํด๋น ํ์ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋
๊ทธ๋ฌ๋ ์์ผ๋์นด๋ ํ๋์ ์ผ๋ฐ(์์ผ๋์นด๋๊ฐ ์๋) ํ๋์ ๋์ผํ ํ๋๋ฅผ ํฌํจํ๋ ์ธ๋ฑ์ค๋ ์ ์ํ ์ ์์ต๋๋ค. ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ํ๋ ค๋ฉด
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก
|
๋์
๊ธฐ์กด ์ธ๋ฑ์ค ๋ค์ ๋ง๋ค๊ธฐ
์ด๋ฏธ ์กด์ฌํ๋ ์ธ๋ฑ์ค์ ๋ํด db.collection.createIndexes()
๋ฅผ ํธ์ถํ๋ฉด MongoDB๋ ๊ธฐ์กด ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์์ฑํ์ง ์์ต๋๋ค.
์ธ๋ฑ์ค ์ต์
๋ฐ์ดํฐ ๋น์ ๋ ฌ ๋ฐ ๋น์จ๊น ์ต์
๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ ์ ์ธํ๊ณ , ํ ์ธํธ์ ์ธ๋ฑ์ค ์ต์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ค์ ๋ค๋ฅธ ์ธ๋ฑ์ค ์ต์ ์ผ๋ก ๋์ผํ ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์์ฑํ๋ ค๊ณ ํ๋ฉด MongoDB๋ ์ต์ ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์์ฑํ์ง ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ์จ๊น ์ต์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์จ๊น ์ต์ ์ ์ฐธ์กฐํ์ธ์.
๋ค๋ฅธ ์ธ๋ฑ์ค ์ต์
์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ธฐ์กด ์ธ๋ฑ์ค๋ฅผ db.collection.dropIndex()
๋ก ์ ๊ฑฐํ ํ ์ ์ต์
์ผ๋ก db.collection.createIndexes()
๋ฅผ ์คํํ์ธ์.
๋ฐ์ดํฐ ์ ๋ ฌ ์ต์
๋์ผํ ํค์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํค ํจํด์ ๊ฐ์ง๋ง ๋ฐ์ดํฐ ์ ๋ ฌ์ด ๋ค๋ฅธ ๊ณ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ๊ณ ์ ํ ์ธ๋ฑ์ค ์ด๋ฆ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
์จ๊ฒจ์ง ์ต์
๊ธฐ์กด ์ธ๋ฑ์ค๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ์จ๊น ํด์ ํ๋ ค๋ฉด ๋ค์ mongosh
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ธ๋ฑ์ค์
hidden
์ต์ ์true
(์ผ)๋ก ๋ณ๊ฒฝํ๋ ค๋ฉดdb.collection.hideIndex()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); ์ธ๋ฑ์ค์
hidden
์ต์ ์false
(์ผ)๋ก ๋ณ๊ฒฝํ๋ ค๋ฉดdb.collection.unhideIndex()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.db.restaurants.unhideIndex( { borough: 1, city: 1 } );
์์ผ๋์นด๋ ์ธ๋ฑ์ค
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก
_id
ํ๋๋ฅผ ์๋ตํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค์_id
ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ํด๋น ํ๋๋ฅผwildcardProjection
๋ฌธ์์ ๋ช ์์ ์ผ๋ก ํฌํจํด์ผ ํฉ๋๋ค.{ "wildcardProjection" : { "_id" : 1, "<field>" : 0|1 } } wildcardProjection
๋ฌธ์์ ๋ชจ๋ ๋ช ๋ น๋ฌธ์ ํฌํจ๋ฌธ ๋๋ ์ ์ธ๋ฌธ์ด์ด์ผ ํฉ๋๋ค. ์ ์ธ๋ฌธ๊ณผ ํจ๊ป_id
ํ๋๋ฅผ ํฌํจํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ท์น์ ์ ์ผํ ์์ธ์ ๋๋ค.์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์ ์ฌํญ์ ์ง์ํ์ง ์์ต๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ํฌ์ ์ธ๋ฑ์ค์ ๋๋ค. ์ธ๋ฑ์ฑ๋ ํ๋๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์์ผ๋์นด๋ ํ๋์
null
๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.MongoDB 7.0๋ถํฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ค๋ฆ์ฐจ์(
1
) ๋ฐ ๋ด๋ฆผ์ฐจ์(-1
) ์ ๋ ฌ ์์๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค. ์ด์ ๋ฒ์ ์์๋ ์ค๋ฆ์ฐจ์๋ง ์ง์ํ์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
ํธ๋์ญ์
ํธ๋์ญ์ ์ด ๊ต์ฐจ ์ค๋ ์ฐ๊ธฐ ํธ๋์ญ์ (write transaction)์ธ ์ด ์๋ ๊ฒฝ์ฐ ๋ถ์ฐ ํธ๋์ญ์ ๋ด์์ ์ปฌ๋ ์ ๊ณผ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํธ๋์ญ์
์์ db.collection.createIndexes()
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํธ๋์ญ์
์์ ์ฝ๊ธฐ ๊ณ ๋ ค "local"
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. "local"
์ด์ธ์ ์ฝ๊ธฐ ๊ณ ๋ ค ์์ค์ ์ง์ ํ๋ฉด ํธ๋์ญ์
์ด ์คํจํฉ๋๋ค.
์์
์ต์ ์์ด ์ธ๋ฑ์ค ์์ฑ
๋ค์๊ณผ ์ ์ฌํ ๋ฌธ์๊ฐ ํฌํจ๋ restaurants
collection์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
{ location: { type: "Point", coordinates: [-73.856077, 40.848447] }, name: "Morris Park Bake Shop", cuisine: "Cafe", borough: "Bronx", }
๋ค์ ์์์์๋ restaurants
์ปฌ๋ ์
์ ๋ ๊ฐ์ ์ธ๋ฑ์ค, ์ฆ borough
ํ๋์ ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค์ location
ํ๋์ 2dsphere ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.restaurants.createIndexes([{"borough": 1}, {"location": "2dsphere"}])
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ฌ ์ธ๋ฑ์ค ์์ฑํ๊ธฐ
๋ค์ ์์์์๋ products
collection์ ๋ ๊ฐ์ ์ธ๋ฑ์ค, ์ฆ manufacturer
ํ๋ ๊ธฐ์ค์ ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค์ category
ํ๋ ๊ธฐ์ค์ ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค. ๋ ์ธ๋ฑ์ค ๋ชจ๋ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ fr
๋ฐ ๋น๊ต ๊ฐ๋ 2
๋ฅผ ์ง์ ํ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํฉ๋๋ค.
db.products.createIndexes( [ { "manufacturer": 1}, { "category": 1 } ], { collation: { locale: "fr", strength: 2 } })
๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ ๊ท์น์ ์ฌ์ฉํ๋ ์ธ๋ฑ์ฑ๋ ํค์ ๋ํ ์ฟผ๋ฆฌ ๋๋ ์ ๋ ฌ ์์ ์ ๊ฒฝ์ฐ MongoDB๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ ์ ๋ ฌ ๋ฐ ์ธ๋ฑ์ค ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
์์ผ๋์นด๋ ์ธ๋ฑ์ค์ ๋ํ ์ ์ฒด ๋ฌธ์๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค์์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ์ ์์ ๋๋ค.
์ฌ๋ฌ ํน์ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ
์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ปค๋ฒ๋ฆฌ์ง์์ ํน์ ํ๋ ์๋ต
๋จ์ผ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ
products_catalog
๋ฌธ์์ product_attributes
ํ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ปฌ๋ ์
์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. product_attributes
ํ๋์๋ ๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด์ ํฌํจํ์ฌ ์์์ ์ค์ฒฉ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
๋ค์ ์์
์ product_attributes
ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
use inventory db.products_catalog.createIndexes( [ { "product_attributes.$**" : 1 } ] )
์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด MongoDB๋ product_attributes
์ ๋ชจ๋ ์ค์นผ๋ผ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค. ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด๋ก ๋ํ์ด๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ product_attributes
๋๋ ์ค์ฒฉ๋ ํ๋ ์ค ํ๋์ ๋ํ ์์์ ๋จ์ผ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.products_catalog.find( { "product_attributes.superFlight" : true } ) db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt : 20 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
์ฐธ๊ณ
๊ฒฝ๋ก๋ณ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๊ตฌ๋ฌธ์ wildcardProjection
์ต์
๊ณผ ํธํ๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋งค๊ฐ๋ณ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ
products_catalog
๋ฌธ์์ product_attributes
ํ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ปฌ๋ ์
์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. product_attributes
ํ๋์๋ ๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด์ ํฌํจํ์ฌ ์์์ ์ค์ฒฉ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
๋ค์ ์์
์ ๋ชจ๋ ์ค์นผ๋ผ ํ๋(_id
ํ๋ ์ ์ธ)์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค์ ์์ฑํฉ๋๋ค.
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ] )
MongoDB๋ ์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ collection์ ๊ฐ ๋ฌธ์์ ๋ํ ๋ชจ๋ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค. ์ง์ ๋ ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ์์ ์ ์ํํ์ฌ ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
์์ฑ๋ ์ธ๋ฑ์ค๋ collection์ ์๋ ๋ฌธ์ ๋ด์ ์์ ํ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.products_catalog.find( { "product_price" : { $lt : 25 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก _id
ํ๋๋ฅผ ์๋ตํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค์ _id
ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ํด๋น ํ๋๋ฅผ wildcardProjection
๋ฌธ์์ ๋ช
์์ ์ผ๋ก ํฌํจํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋งค๊ฐ๋ณ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ๋ฌ ํน์ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ
products_catalog
๋ฌธ์์ product_attributes
ํ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ปฌ๋ ์
์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. product_attributes
ํ๋์๋ ๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด์ ํฌํจํ์ฌ ์์์ ์ค์ฒฉ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
๋ค์ ์์
์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค์ ์์ฑํ๊ณ wildcardProjection
์ต์
์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค์ product_attributes.elements
๋ฐ product_attributes.resistance
ํ๋์ ์ค์นผ๋ผ ๊ฐ๋ง ํฌํจํฉ๋๋ค.
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.elements" : 1, "product_attributes.resistance" : 1 } } )
"$**"
ํจํด์ ๋ฌธ์์ ๋ชจ๋ ํ๋๋ฅผ ํฌํจํฉ๋๋ค. wildcardProjection
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ง์ ๋ ํ๋๋ก ์ ํํฉ๋๋ค.
wildcardProjection
์ ๋ํ ์ ์ฒด ๋ฌธ์๋ wildcard
์ธ๋ฑ์ค์ ๋ํ ์ต์
์ ์ฐธ์กฐํ์ธ์.
ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด๋ก ๋ฐ๋ณต๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ wildcardProjection
์ ํฌํจ๋ ๋ชจ๋ ์ค์นผ๋ผ ํ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
db.products_catalog.find( { "product_attributes.elements" : { $eq: "Water" } } ) db.products_catalog.find( { "product_attributes.resistance" : "Bludgeoning" } )
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ _id
ํ๋๋ฅผ ๋ช
์์ ์ผ๋ก ํฌํจํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ wildcardProjection
๋ฌธ์์์ ํฌํจ ๋ฐ ์ ์ธ ๋ฌธ์ ํผํฉํ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค. wildcardProjection
์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋งค๊ฐ๋ณ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ปค๋ฒ๋ฆฌ์ง์์ ํน์ ํ๋ ์๋ต
products_catalog
๋ฌธ์์ product_attributes
ํ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ปฌ๋ ์
์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. product_attributes
ํ๋์๋ ๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด์ ํฌํจํ์ฌ ์์์ ์ค์ฒฉ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
์ด ์์์์๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค์ wildcardProjection
๋ฌธ์๋ฅผ ์ฌ์ฉํด ์ปฌ๋ ์
์ ํฌํจ๋ ๊ฐ ๋ฌธ์์ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ product_attributes.elements
๋ฐ product_attributes.resistance
ํ๋๋ฅผ ์ ์ธํฉ๋๋ค:
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.elements" : 0, "product_attributes.resistance" : 0 } } )
์์ผ๋์นด๋ ํจํด "$**"
์๋ ๋ฌธ์์ ๋ชจ๋ ํ๋๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ wildcardProjection
ํ๋๋ ์ง์ ๋ ํ๋๋ฅผ ์ธ๋ฑ์ค์์ ์ ์ธํฉ๋๋ค.
wildcardProjection
์ ๋ํ ์ ์ฒด ๋ฌธ์๋ wildcard
์ธ๋ฑ์ค์ ๋ํ ์ต์
์ ์ฐธ์กฐํ์ธ์.
ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด๋ก ๋ฐ๋ณต๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ์ค์นผ๋ผ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
์ธ๋ฑ์ค๋ wildcardProjection
์ผ๋ก ์ ์ธ๋ ํ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค์นผ๋ผ ํ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt: 25 } } ) db.products_catalog.find( { "product_attributes.superStrength" : true } )
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ _id
ํ๋๋ฅผ ๋ช
์์ ์ผ๋ก ํฌํจํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ wildcardProjection
๋ฌธ์์์ ํฌํจ ๋ฐ ์ ์ธ ๋ฌธ์ ํผํฉํ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค. wildcardProjection
์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋งค๊ฐ๋ณ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฟผ๋ผ ์ปค๋ฐ์ผ๋ก ์ธ๋ฑ์ค ์์ฑ
์ฐธ๊ณ
featureCompatibilityVersion 4.4 ์ด์์ด ํ์ํฉ๋๋ค.
๋ณต์ ๋ณธ ์ธํธ ๋๋ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์์ ์ธ๋ฑ์ค ๋น๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ ๋ชจ๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์์ ๋์์ ์งํ๋ฉ๋๋ค. ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๋น๋๋ ์ธ๋ฑ์ฑ๋๋ ์ปฌ๋ ์
์ ๋ํ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ค๋์์๋ง ๋ฐ์ํฉ๋๋ค. ํ๋ผ์ด๋จธ๋ฆฌ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๊ฒ์ผ๋ก ํ์ํ๊ธฐ ์ ์ ๋น๋๋ฅผ ์๋ฃํด์ผ ํ๋ ์์ ์ ํฌํจํ ์ต์ํ์ ๋ฐ์ดํฐ ๋ณด์ voting
๋ฉค๋ฒ(์ฆ, ์ฟผ๋ผ ์ปค๋ฐ)๊ฐ ํ์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ณต์ ๋ ํ๊ฒฝ์์์ ์ธ๋ฑ์ค ๋น๋๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฟผ๋ผ ์ปค๋ฐ์ ์ค์ ํ๋ ค๋ฉด createIndexes()
๋ฅผ ์ฌ์ฉํ์ฌ commitQuorum
๊ฐ์ ์ง์ ํฉ๋๋ค.
commitQuorum
์ ์ธ๋ฑ์ค ๋น๋๋ฅผ ์ปค๋ฐํ๊ธฐ ์ํด ์ค๋นํด์ผ ํ๋ ๋ฐ์ดํฐ ๋ณด์ ํฌํ ๋ฉค๋ฒ์ ์ ๋๋ ํ๋ผ์ด๋จธ๋ฆฌ๋ฅผ ํฌํจํ ํฌํ ๋ฉค๋ฒ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ ํ๋ผ์ด๋จธ๋ฆฌ๊ฐ ์ปค๋ฐ์ ์คํํ๊ธฐ ์ ์ ์ถฉ์กฑ๋์ด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ์ฟผ๋ผ ์ปค๋ฐ์ votingMembers
์ด๋ฉฐ, ์ด๋ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณด์ ๋ฉค๋ฒ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ค์ ์ฐ์ฐ์ ์ฟผ๋ผ ์ปค๋ฐ์ด "majority"
์ธ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.getSiblingDB("examples").invoices.createIndexes( { "invoices" : 1 }, { }, "majority" )
ํ๋ผ์ด๋จธ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ ํฌํ ๋ ธ๋์ ๋จ์ ๊ณผ๋ฐ์๊ฐ ์ธ๋ฑ์ค ๋น๋๋ฅผ ์ปค๋ฐํ๊ธฐ ์ํด 'ํฌํ'ํ ํ์๋ง ์ธ๋ฑ์ค ๋น๋๋ฅผ ์ค๋น๋ ๊ฒ์ผ๋ก ํ์ํฉ๋๋ค. ์ธ๋ฑ์ค ๋น๋์ ํฌํ ํ๋ก์ธ์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณต์ ๋ ํ๊ฒฝ์์์ ์ธ๋ฑ์ค ๋น๋๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ๋ฌ ์ธ๋ฑ์ค ์์ฑ
์บ๋ฆฌํฌ๋์์ฃผ(CA
)์ ์์ฑํด์ฃผ(WA
)์ ์ผ์ดํฌ ํ๋งค๋์ด ํฌํจ๋ cakeSales
collection์ ์์ฑํฉ๋๋ค.
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
๋ค์ ์์์์๋ cakeSales
์ปฌ๋ ์
์ ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.
db.cakeSales.createIndexes( [ { "type": 1 }, { "orderDate": 1 }, { "state": 1 }, { "orderDate": 1, "state": -1 } ] )
์ฒ์ ์ธ ๊ฐ์ ์ธ๋ฑ์ค๋ ๋จ์ผ ํ๋์ ์์ผ๋ฉฐ ์ค๋ฆ์ฐจ์(1
)์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
๋ง์ง๋ง ์ธ๋ฑ์ค๋ orderDate
์ ์ค๋ฆ์ฐจ์(1
), state
์ ๋ด๋ฆผ์ฐจ์(-1
)์ผ๋ก ์์ต๋๋ค.
์ถ๊ฐ ์ ๋ณด
์ธ๋ฑ์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
์ด ์ค๋ช ์์ ์ธ๋ฑ์ค ์น์ ์์ MongoDB์ ์ธ๋ฑ์ค ๋ฐ ์ธ๋ฑ์ฑ์ ๋ํ ์ ์ฒด ๋ฌธ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
db.collection.getIndexes()
๋ ์ปฌ๋ ์ ์ ๋ํ ๊ธฐ์กด ์ธ๋ฑ์ค์ ์ฌ์์ ๋์ดํฉ๋๋ค.Text Indexes on Self-Managed Deployments -
text
์ธ๋ฑ์ค ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ง๋ฆฌ ๊ณต๊ฐ์ ์ฟผ๋ฆฌ์ ๋ํ ์ง๋ฆฌ ๊ณต๊ฐ์ ์ธ๋ฑ์ค .
๋ฐ์ดํฐ ๋ง๋ฃ์ ๋ํ TTL ์ธ๋ฑ์ค์ ๋๋ค.