์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ
์ด ํ์ด์ง์ ๋ด์ฉ
์ธ๋ฑ์ค์๋ ์ ๋ ฌ๋ ๊ธฐ๋ก์ด ํฌํจ๋๋ฏ๋ก MongoDB๋ ์ ๋ ฌ ํ๋๋ฅผ ํฌํจํ๋ ์ธ๋ฑ์ค์์ ์ ๋ ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ ๋ ฌ์ด ์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ๋์ผํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ MongoDB๋ ์ ๋ ฌ ์์ ์ ์ง์ํ๊ธฐ ์ํด ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB๊ฐ ์ธ๋ฑ์ค ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ์ ์์๋๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒฝ์ฐ, MongoDB๋ ๋ฐ์ดํฐ์ ๋ํด ๋ธ๋กํน ์ ๋ ฌ ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ์ฐจ๋จ ์ ๋ ฌ์ MongoDB๊ฐ ์ ๋ ฌ์ ๋ํ ๋ชจ๋ ์ ๋ ฅ ๋ฌธ์๋ฅผ ์๋นํ๊ณ ์ฒ๋ฆฌํด์ผ ํจ์ ๋ํ๋ ๋๋ค. ์ฐจ๋จ ์ ๋ ฌ์ ์ปฌ๋ ์ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์ ์์ ์ ์ฐจ๋จํ์ง ์์ต๋๋ค.
MongoDB์์ 100 ์ฐจ๋จ ์ ๋ ฌ ์์
์ ๋ฉ๊ฐ๋ฐ์ดํธ ์ด์์ ์์คํ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ์์ ๋ฅผ cursor.allowDiskUse()
์ง์ ํ์ง ์๋ ํ MongoDB์์ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
allowDiskUse()
๋ฅผ ์ฌ์ฉํ๋ฉด MongoDB๊ฐ ๋์คํฌ์ ์์ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ฐจ๋จ ์ ๋ ฌ ์์
์ ์ฒ๋ฆฌํ๋ ๋์ 100 ๋ฉ๊ฐ๋ฐ์ดํธ ์์คํ
๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ด๊ณผํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์ ๋ ฌ ์์ ์ ์ฐจ๋จ ์ ๋ ฌ๋ณด๋ค ์ฑ๋ฅ์ด ๋ ์ข์ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฐธ๊ณ
MongoDB 4.4์์ ๋ฐฐ์ด ํ๋์ ์ ๋ ฌ ๋์์ด ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ, ๋ฉํฐํค ์ธ๋ฑ์ค ๋ก ์ธ๋ฑ์ฑ๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ฟผ๋ฆฌ ๊ณํ์ ๋ธ๋กํน ์ ๋ ฌ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ชจ๋ ์ ๋ ฌ ํ๋์ ์ธ๋ฑ์ค ๊ฒฝ๊ณ ๋
[MinKey, MaxKey]
์ด๋ฉฐ ,๋ฉํฐํค ์ธ๋ฑ์ค ํ๋์ ๊ฒฝ๊ณ์๋ ์ ๋ ฌ ํจํด๊ณผ ๋์ผํ ๊ฒฝ๋ก ์ ๋์ฌ๊ฐ ์์ต๋๋ค.
๋จ์ผ ํ๋ ์ธ๋ฑ์ค๋ก ์ ๋ ฌ
๋จ์ผ ํ๋์ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์ ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ ฌ ํ๋ ์์ ์ ์ด๋ ๋ฐฉํฅ์ผ๋ก๋ ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, records
์ปฌ๋ ์
์ a
ํ๋์ ์ค๋ฆ์ฐจ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.records.createIndex( { a: 1 } )
์ด ์ธ๋ฑ์ค๋ ๋ค์์์ a
์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ง์ํ ์ ์์ต๋๋ค.
db.records.find().sort( { a: 1 } )
์ธ๋ฑ์ค๋ฅผ ์ญ์์ผ๋ก ํ์ํ์ฌ ์์ ๋ค์๊ณผ ๊ฐ์ด a
์ ๋ํ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ง์ํ ์๋ ์์ต๋๋ค.
db.records.find().sort( { a: -1 } )
์ฌ๋ฌ ํ๋์์ ์ ๋ ฌ
๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ์ฌ๋ฌ ํ๋์์ ์ ๋ ฌ์ ์ง์ํฉ๋๋ค.
์ธ๋ฑ์ค์ ๋ชจ๋ ํค ๋๋ ์๋ธ์ธํธ์ ๋ํด ์ ๋ ฌ์ ์ง์ ํ ์ ์์ง๋ง, ์ ๋ ฌ ํค๋ ์ธ๋ฑ์ค์ ํ์๋๋ ๊ฒ๊ณผ ๋์ผํ ์์ ๋ก ๋์ด๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ๋ฑ์ค ํค ํจํด { a: 1, b: 1
}
์ { a: 1, b: 1 }
์ ์ ๋ ฌ์ ์ง์ํ ์ ์์ง๋ง { b: 1, a:
1 }
์ ์ ๋ ฌ์ ์ง์ํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๊ฐ ์ ๋ ฌ์ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด cursor.sort()
๋ฌธ์์ ๋ชจ๋ ํค์ ์ง์ ๋ ์ ๋ ฌ ๋ฐฉํฅ์ด ์ธ๋ฑ์ค ํค ํจํด ๋๋ ๊ทธ ์ญ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ธ๋ฑ์ค ํค ํจํด { a: 1, b: -1 }
์ { a: 1, b: -1 }
๋ฐ { a: -1, b: 1 }
์ ์ ๋ ฌ์ ์ง์ํ ์ ์์ง๋ง { a: -1, b: -1 }
๋๋ {a: 1, b: 1}
์ ์ ๋ ฌ์ ์ง์ํ์ง ์์ต๋๋ค.
์ ๋ ฌ ๋ฐ ์ธ๋ฑ์ค ์ ๋์ฌ
์ ๋ ฌ ํค๊ฐ ์ธ๋ฑ์ค ํค ๋๋ ์ธ๋ฑ์ค ์ ๋์ฌ์ ํด๋นํ๋ ๊ฒฝ์ฐ, MongoDB๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ ์ ์์ต๋๋ค. ๋ณตํฉ ์ธ๋ฑ์ค์ ์ ๋์ฌ๋ ์ธ๋ฑ์ค ํค ํจํด์ ์์ ๋ถ๋ถ์ ์๋ ํ๋ ์ด์์ ํค๋ก ๊ตฌ์ฑ๋ ํ์ ์งํฉ์ ๋๋ค.
์๋ฅผ ๋ค์ด data
์ปฌ๋ ์
์ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.data.createIndex( { a:1, b: 1, c: 1, d: 1 } )
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ํญ๋ชฉ์ด ์ธ๋ฑ์ค์ ์ ๋์ฌ์ ํด๋นํฉ๋๋ค.
{ a: 1 } { a: 1, b: 1 } { a: 1, b: 1, c: 1 }
๋ค์ ์ฟผ๋ฆฌ ๋ฐ ์ ๋ ฌ ์์ ์ ์ธ๋ฑ์ค ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํฉ๋๋ค. ์ด๋ฌํ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฐ๊ณผ ์ธํธ๋ฅผ ์ ๋ ฌํ ํ์๊ฐ ์์ต๋๋ค.
์์ | Index Prefix |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
์ธ๋ฑ์ค์ ์ ๋์ฌ ํค๊ฐ ์ฟผ๋ฆฌ ์ ์ด์ ์ ๋ ฌ ๋ชจ๋์ ๋ํ๋๋ ๋ค์ ์์๋ฅผ ์ดํด๋ณด์ธ์.
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } )
์ด๋ฌํ ๊ฒฝ์ฐ MongoDB๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ์์ ์ง์ ํ ์์๋๋ก ๋ฌธ์๋ฅผ ์กฐํํ ์ ์์ต๋๋ค. ์์์์ ๋ณผ ์ ์๋ฏ์ด ์ฟผ๋ฆฌ ์ ์ด์ ์ธ๋ฑ์ค ์ ๋์ฌ๋ ์ ๋ ฌ์ ์ ๋์ฌ์ ๋ค๋ฅผ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค์ ์ ๋ ฌ ๋ฐ ์ ๋์ฌ๊ฐ ์๋ ํ์ ์งํฉ
์ธ๋ฑ์ค๋ ์ ๋์ฌ๊ฐ ์๋ ์ธ๋ฑ์ค ํค ํจํด ํ์ ์งํฉ์ ์ ๋ ฌ ์์ ์ ์ง์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ ๋ ฌ ํค ์์ ์ค๋ ๋ชจ๋ ์ ๋์ฌ ํค์ ๋ํ ๋๋ฑ์ฑ ์กฐ๊ฑด์ด ์ฟผ๋ฆฌ์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด data
์ปฌ๋ ์
์ ์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ a: 1, b: 1, c: 1, d: 1 }
๋ค์ ์์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ ์์๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค.
์์ | Index Prefix |
---|---|
|
|
|
|
|
|
๋ง์ง๋ง ์์ ์์ ๋ณผ ์ ์๋ฏ์ด ์ฟผ๋ฆฌ ๋ฌธ์์์ ์ ๋ ฌ ํ์ ์งํฉ ์์ ์๋ ์ธ๋ฑ์ค ํ๋์๋ง ๋๋ฑ์ฑ ์กฐ๊ฑด์ด ์ ์ฉ๋์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ธ๋ฑ์ค ํ๋๋ ๋ค๋ฅธ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๊ฐ ์ ๋ ฌ ์ฌ์ ์์ ์ค๊ฑฐ๋ ๊ฒน์น๋ ์ธ๋ฑ์ค ์ ๋์ฌ์ ๋๋ฑ์ฑ ์กฐ๊ฑด์ ์ง์ ํ์ง ์์ผ๋ฉด ์์
์์ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ์์
์ { c: 1 }
์ ์ ๋ ฌ ๋ฌธ์๋ฅผ ์ง์ ํ์ง๋ง ์ฟผ๋ฆฌ ๋ฌธ์๋ ์ ํ ์ธ๋ฑ์ค ํ๋ a
๋ฐ b
์ ๋๋ฑ์ฑ ๋งค์น๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.
db.data.find( { a: { $gt: 2 } } ).sort( { c: 1 } ) db.data.find( { c: 5 } ).sort( { c: 1 } )
์ด๋ฌํ ์์
์ { a: 1, b: 1,
c: 1, d: 1 }
์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ฌธ์๋ฅผ ์กฐํํ๋ ๋ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์๋ ์์ต๋๋ค.
์ธ๋ฑ์ค ์ ๋ ฌ ์์
์ธ๋ฑ์ค๋ ๋ฌธ์ ๋ชจ์์ ํค ํ๋์ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ธ๋ฑ์ค์ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง ํค๊ฐ ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ BSON ์ ํ ์ ๋ ฌ ์์์ ๋ฐ๋ผ ์ ๋ ฌ๋ฉ๋๋ค.
๋ฐฐ์ด ๋น๊ต์์
์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ BSON ์ ํ ์ ๋ ฌ ์์์ ๋ฐ๋ผ ๋ฐฐ์ด ์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ BSON ์ ํ์ ์ญ์ ์ ๋ ฌ์ ๋ฐ๋ผ ๋ฐฐ์ด ์ ๊ฐ์ฅ ํฐ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
๋ฐ ๊ณผ
$lt
๊ฐ์ ๋น๊ต$gt
์ฟผ๋ฆฌ ์ฐ์ฐ์๋ ์ฌ์ ์์ผ๋ก ๋ฐฐ์ด์ ๋น๊ตํฉ๋๋ค.๊ฐ์ด ํ ์์ ๋ฐฐ์ด ( ์์ :
[ 1 ]
)์ธ ํ๋ ๋ฐฐ์ด์ด ์๋ ํ๋( ์์:2
)์ ๋น๊ตํ ๋ ๋น๊ต๋1
๋ฐ2
์ ๋ํ ๊ฒ์ ๋๋ค.๋น ๋ฐฐ์ด ( ์์:
[ ]
)์ ๋น๊ตํ๋ฉด ๋น ๋ฐฐ์ด ์ดnull
๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๋๋ฝ๋ ํ๋ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.์ค์ฒฉ๋ ๋ฐฐ์ด ์ ๋น๊ต( ์์ :
[[1, 2], [3, 4]]
)๋ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ๋ฐฐ์ด ์ดํ์ ๋ชจ๋ ๋ฐฐ์ด ์ฌ์ ์์ผ๋ก ๋น๊ตํฉ๋๋ค.
์ธ๋ฑ์ค ์ ๋ ฌ ์์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ธ๋ฑ์ค ์ฌ์ฉ ๋ฐ ๋ฐ์ดํฐ ์ ๋ ฌ
๋ฌธ์์ด ๋น๊ต์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์ ์์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ์ฆ, ์์ ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ฑ๋ ํ๋์์ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํํ๋ ์์ ์ ์ง์ํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
๋ฐ์ดํฐ ์ ๋ ฌ๋ก ๊ตฌ์ฑ๋ ์ธ๋ฑ์ค๋ 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" ํค์ ์ผ์นํ์ง ์์ต๋๋ค. ์ด๋ ๊ฐ๋ ๋งค๊ฐ๋ณ์์ ์ค์ ํ ๊ฐ์ ๊ด๊ณ์์ด ์ ์ฉ๋ฉ๋๋ค.
์์
๋ค์ ์์๋ ์ธ๋ฑ์ค ํค์ ์ ํ์ด ๋์ผํ๊ฑฐ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ ๋ ฌ์ ๋ณด์ฌ์ค๋๋ค.
keyTypes
์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
db.keyTypes.insertMany( [ { seqNum: 1, seqType: null, type: "null" }, { seqNum: 29, seqType: null, type: "null" }, { seqNum: 2, seqType: Int32("10"), type: "Int32" }, { seqNum: 28, seqType: Int32("10"), type: "Int32" }, { seqNum: 3, seqType: Long("10"), type: "Long" }, { seqNum: 27, seqType: Long("10"), type: "Long" }, { seqNum: 4, seqType: Decimal128("10"), type: "Decimal128" }, { seqNum: 26, seqType: Decimal128("10"), type: "Decimal128" }, { seqNum: 5, seqType: Double("10"), type: "Double" }, { seqNum: 25, seqType: Double("10"), type: "Double" }, { seqNum: 6, seqType: String("10"), type: "String" }, { seqNum: 24, seqType: String("10"), type: "String" }, { seqNum: 7, seqType: [ "1", "2", "3" ], type: "Array" }, { seqNum: 23, seqType: [ "1", "2", "3" ], type: "Array" }, { seqNum: 8, seqType: [ [1], [2], [3] ], type: "Array" }, { seqNum: 22, seqType: [ [1], [2], [3] ], type: "Array " }, { seqNum: 9, seqType: [ 1, 2, 3 ], type: "Array" }, { seqNum: 21, seqType: [ 1, 2, 3 ], type: "Array" }, { seqNum: 10, seqType: true, type: "Boolean" }, { seqNum: 11, seqType: new Timestamp(), type: "Timestamp" }, { seqNum: 12, seqType: new Date(), type: "Date" }, { seqNum: 13, seqType: new ObjectId(), type: "ObjectId" }, ] )
์ํ์ค ๋ฒํธ(seqNum
) ๋ฐ ์ ํ(seqType
) ํ๋์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.keyTypes.createIndex( { seqNum: 1 } ) db.keyTypes.createIndex( { seqType: 1 } )
find()
๋ฅผ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์
์ ์ฟผ๋ฆฌํฉ๋๋ค. ํ๋ก์ ์
๋ฌธ์{ _id: 0 }
๋ ์ถ๋ ฅ ๋์คํ๋ ์ด์์ _id
ํ๋๋ฅผ ํ์ํ์ง ์์ต๋๋ค.
db.keyTypes.find( {}, { _id: 0 } )
๋ฌธ์๊ฐ ์ฝ์ ๋ ์์๋๋ก ๋ฐํ๋ฉ๋๋ค.
{ seqNum: 1, seqType: null, type: 'null' }, { seqNum: 29, seqType: null, type: 'null' }, { seqNum: 2, seqType: 10, type: 'Int32' }, { seqNum: 28, seqType: 10, type: 'Int32' }, { seqNum: 3, seqType: Long("10"), type: 'Long' }, { seqNum: 27, seqType: Long("10"), type: 'Long' }, { seqNum: 4, seqType: Decimal128("10"), type: 'Decimal128' }, // Output truncated
์ํ์ค ๋ฒํธ(seqNum
) ์ธ๋ฑ์ค๋ ๋์ผํ ์ ํ์ ๊ฐ์ ๊ฐ์ง๋๋ค. seqNum
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ keyTypes
์ปฌ๋ ์
์ ์ฟผ๋ฆฌํฉ๋๋ค.
db.keyTypes.find( {}, { _id: 0 } ).sort( { seqNum: 1} )
seqNum
ํค๋ ์ ์์
๋๋ค. ๋ฌธ์๋ ๋ฒํธ ์์๋๋ก ๋ฐํ๋ฉ๋๋ค.
{ seqNum: 1, seqType: null, type: 'null' }, { seqNum: 2, seqType: 10, type: 'Int32' }, { seqNum: 3, seqType: Long("10"), type: 'Long' }, { seqNum: 4, seqType: Decimal128("10"), type: 'Decimal128' }, { seqNum: 5, seqType: 10, type: 'Double' }, { seqNum: 6, seqType: '10', type: 'String' }, { seqNum: 7, seqType: [ '1', '2', '3' ], type: 'Array' }, // Output truncated
์ํ์ค ์ ํ(seqType
) ์ธ๋ฑ์ค๋ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ ๊ฐ์ง๋๋ค. seqType
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ keyTypes
์ปฌ๋ ์
์ ์ฟผ๋ฆฌํฉ๋๋ค.
db.keyTypes.find( {}, { _id: 0 } ).sort( { seqType: 1} )
๋ฌธ์๋ BSON ์ ํ ์ ๋ ฌ ์์๋ก ๋ฐํ๋ฉ๋๋ค.
{ seqNum: 1, seqType: null, type: 'null' }, { seqNum: 29, seqType: null, type: 'null' }, { seqNum: 9, seqType: [ 1, 2, 3 ], type: 'Array' }, { seqNum: 21, seqType: [ 1, 2, 3 ], type: 'Array' }, { seqNum: 2, seqType: 10, type: 'Int32' }, { seqNum: 28, seqType: 10, type: 'Int32' }, { seqNum: 3, seqType: Long("10"), type: 'Long' }, { seqNum: 27, seqType: Long("10"), type: 'Long' }, { seqNum: 4, seqType: Decimal128("10"), type: 'Decimal128' }, { seqNum: 26, seqType: Decimal128("10"), type: 'Decimal128' }, { seqNum: 5, seqType: 10, type: 'Double' }, { seqNum: 25, seqType: 10, type: 'Double' }, { seqNum: 7, seqType: [ '1', '2', '3' ], type: 'Array' }, { seqNum: 23, seqType: [ '1', '2', '3' ], type: 'Array' }, { seqNum: 6, seqType: '10', type: 'String' }, { seqNum: 24, seqType: '10', type: 'String' }, { seqNum: 8, seqType: [ [ 1 ], [ 2 ], [ 3 ] ], type: 'Array' }, { seqNum: 22, seqType: [ [ 1 ], [ 2 ], [ 3 ] ], type: 'Array ' }, { seqNum: 13, seqType: ObjectId("6239e3922604d5a7478df071"), type: 'ObjectId' }, { seqNum: 10, seqType: true, type: 'Boolean' }, { seqNum: 12, seqType: ISODate("2022-03-22T14:56:18.100Z"), type: 'Date' }, { seqNum: 11, seqType: Timestamp({ t: 1647960978, i: 1 }), type: 'Timestamp' }
๋ฐฐ์ด ๋น๊ต์์
์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ BSON ์ ํ ์ ๋ ฌ ์์์ ๋ฐ๋ผ ๋ฐฐ์ด ์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ BSON ์ ํ์ ์ญ์ ์ ๋ ฌ์ ๋ฐ๋ผ ๋ฐฐ์ด ์ ๊ฐ์ฅ ํฐ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
๋ฐ ๊ณผ
$lt
๊ฐ์ ๋น๊ต$gt
์ฟผ๋ฆฌ ์ฐ์ฐ์๋ ์ฌ์ ์์ผ๋ก ๋ฐฐ์ด์ ๋น๊ตํฉ๋๋ค.๊ฐ์ด ํ ์์ ๋ฐฐ์ด ( ์์ :
[ 1 ]
)์ธ ํ๋ ๋ฐฐ์ด์ด ์๋ ํ๋( ์์:2
)์ ๋น๊ตํ ๋ ๋น๊ต๋1
๋ฐ2
์ ๋ํ ๊ฒ์ ๋๋ค.๋น ๋ฐฐ์ด ( ์์:
[ ]
)์ ๋น๊ตํ๋ฉด ๋น ๋ฐฐ์ด ์ดnull
๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๋๋ฝ๋ ํ๋ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.์ค์ฒฉ๋ ๋ฐฐ์ด ์ ๋น๊ต( ์์ :
[[1, 2], [3, 4]]
)๋ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ๋ฐฐ์ด ์ดํ์ ๋ชจ๋ ๋ฐฐ์ด ์ฌ์ ์์ผ๋ก ๋น๊ตํฉ๋๋ค.
์ซ์ ํ์(Int32, Long, Decimal128, Double)์ ๋ค๋ฅธ ์ ํ๊ณผ ๋น๊ตํด ๋์ผํฉ๋๋ค.
์ซ์ BSON ์ ํ์์ ์ซ์ ์ ํ์ ์ ๋ ฌํฉ๋๋ค.
Int32
Long
Decimal128
Double