Multikey Indexes
์ด ํ์ด์ง์ ๋ด์ฉ
๋ฐฐ์ด ๊ฐ์ด ํฌํจ๋ ํ๋๋ฅผ ์ธ๋ฑ์ฑํ๊ธฐ ์ํด MongoDB๋ ๋ฐฐ์ด์ ๊ฐ ๊ณ ์ ์์์ ๋ํ ์ธ๋ฑ์ค ํค๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฌํ ๋ฉํฐํค ์ธ๋ฑ์ค๋ ๋ฐฐ์ด ํ๋์ ๋ํ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ๋ ์ค์นผ๋ผ ๊ฐ [1] ์ ๋ชจ๋ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ํด ๋ค์ค ํค ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค(์: ๋ฌธ์์ด, ์ซ์) ๋ฐ ์ค์ฒฉ ๋ฌธ์๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ฐฐ์ด์ ๋์ผํ ๊ฐ์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค์๋ ํด๋น ๊ฐ์ ๋ํ ํญ๋ชฉ์ด ํ๋๋ง ํฌํจ๋ฉ๋๋ค.
[1] | ์ค์นผ๋ผ ๊ฐ์ ๋ด์ฅ๋ ๋ฌธ์๋ ๋ฐฐ์ด๋ ์๋ ๊ฐ์ ๋ํ๋ ๋๋ค. |
ํธํ์ฑ
MongoDB Atlas์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์ ์ธ๋ฑ์ค ๊ด๋ฆฌ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ธ๋ฑ์ค ์์ฑ, ๋ณด๊ธฐ, ์ญ์ ๋ฐ ์จ๊ธฐ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฉํฐํค ์ธ๋ฑ์ค ์์ฑ
๋ฉํฐํค ์ธ๋ฑ์ค ๋ฅผ ๋ง๋ค๋ ค๋ฉด db.collection.createIndex()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
db.coll.createIndex( { <field>: < 1 or -1 > } )
์ธ๋ฑ์ฑ๋ ํ๋๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ MongoDB๋ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์ฆ, ๋ฉํฐํค ์ ํ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
์ฐธ๊ณ
WiredTiger ๋ฐ ์ธ๋ฉ๋ชจ๋ฆฌ ์คํ ๋ฆฌ์ง ์์ง์๋ง ํด๋น๋ฉ๋๋ค.
๋ฉํฐํค ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ, MongoDB๋ ์ด๋ค ์ธ๋ฑ์ฑ๋ ํ๋๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฉํฐํค ์ธ๋ฑ์ค๋ก ๋ง๋๋์ง๋ฅผ ์ถ์ ํฉ๋๋ค. ์ด ์ ๋ณด๋ฅผ ์ถ์ ํ๋ฉด MongoDB ์ฟผ๋ฆฌ ์์ง์ด ๋ ์๊ฒฉํ ์ธ๋ฑ์ค ๊ฒฝ๊ณ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค ๋ฐ์ด๋
์ธ๋ฑ์ค๊ฐ ๋ฉํฐํค์ธ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ๋ฐ์ด๋ ๊ณ์ฐ์ ํน๋ณํ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค. ๋ฉํฐํค ์ธ๋ฑ์ค ๋ฐ์ด๋์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฉํฐํค ์ธ๋ฑ์ค ๋ฐ์ด๋๋ฅผ ์ฐธ์กฐ ํ์ธ์.
๊ณ ์ ํ ๋ฉํฐํค ์ธ๋ฑ์ค
๊ณ ์ ์ธ๋ฑ์ค ์ ๊ฒฝ์ฐ, ๊ณ ์ ์ ์ฝ ์กฐ๊ฑด์ ๋จ์ผ ๋ฌธ์๊ฐ ์๋ collection์ ๊ฐ๋ณ ๋ฌธ์์ ์ ์ฉ๋ฉ๋๋ค.
๊ณ ์ ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ๋ณ ๋ฌธ์์ ์ ์ฉ๋๋ฏ๋ก ๊ณ ์ ํ ๋ฉํฐํค ์ธ๋ฑ์ค ์ ๊ฒฝ์ฐ ํด๋น ๋ฌธ์์ ์ธ๋ฑ์ค ํค ๊ฐ์ด ๋ค๋ฅธ ๋ฌธ์์ ์ธ๋ฑ์ค ํค ๊ฐ๊ณผ ์ค๋ณต๋์ง ์๋ ํ ๋ฌธ์์ ๋ฐฐ์ด ์์๊ฐ ์์ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํค ๊ฐ์ด ๋ฐ๋ณต๋ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ๊ฐ๋ณ ๋ฌธ์ ๊ฐ ๊ณ ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฐธ์กฐํ์ธ์.
์ ํ ์ฌํญ
๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค
๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ, ๊ฐ ์ธ๋ฑ์ค๋ ๋ฌธ์์๋ ๊ฐ์ด ๋ฐฐ์ด์ธ ์ธ๋ฑ์ค๋ ํ๋๊ฐ ์ต๋ ํ๋๋ง ์์ ์ ์์ต๋๋ค. ์ฆ:
๋ฌธ์์์ ๋ ์ด์์ ์ธ๋ฑ์ฑํ ํ๋๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ฌธ์๊ฐ ํฌํจ๋ collection์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
{ _id: 1, a: [ 1, 2 ], b: [ 1, 2 ], category: "AB - both arrays" } a
๋ฐb
ํ๋๊ฐ ๋ชจ๋ ๋ฐฐ์ด์ด๋ฏ๋ก collection์ ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค{ a: 1, b: 1 }
๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.๋๋ ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ด ์ ํ์ ์๋ฐํ๋ ๋ฌธ์๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
๋ค์ ๋ฌธ์๊ฐ ํฌํจ๋ collection์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
{ _id: 1, a: [1, 2], b: 1, category: "A array" } { _id: 2, a: 1, b: [1, 2], category: "B array" } ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค
{ a: 1, b: 1 }
์ ํ์ฉ๋๋๋ฐ, ์ด๋ ๊ฐ ๋ฌธ์์ ๋ํด ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ก ์ธ๋ฑ์ฑ๋๋ ํ๋๊ฐ ๋ฐฐ์ด ํ๋๋ฟ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ,a
๋ฐb
ํ๋ ๋ชจ๋์ ๋ํ ๋ฐฐ์ด ๊ฐ์ด ํฌํจ๋ ๋ฌธ์๊ฐ ์์ต๋๋ค.๊ทธ๋ฌ๋ ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ํ
a
๋ฐb
ํ๋๊ฐ ๋ชจ๋ ๋ฐฐ์ด์ธ ๋ฌธ์๋ฅผ ์ฝ์ ํ๋ ค๊ณ ํ๋ฉด MongoDB๊ฐ ์ฝ์ ์ ์คํจํฉ๋๋ค.
ํ๋๊ฐ ๋ฌธ์ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ํฌํจ๋ ํ๋๋ฅผ ์ธ๋ฑ์คํํ์ฌ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ฌธ์๊ฐ ํฌํจ๋ collection์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
{ _id: 1, a: [ { x: 5, z: [ 1, 2 ] }, { z: [ 1, 2 ] } ] } { _id: 2, a: [ { x: 5 }, { z: 4 } ] }
{ "a.x": 1, "a.z": 1 }
์ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ต๋ ํ๋์ ์ธ๋ฑ์ฑ๋ ํ๋๊ฐ ๋ฐฐ์ด์ด ๋ ์ ์๋ ์ ํ๋ ์ ์ฉ๋ฉ๋๋ค.
์์ ๋ ๋ด์ฅ๋ ๋ฌธ์๊ฐ ์๋ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ฐธ์กฐํ์ธ์.
๋ค์๋ ์ฐธ์กฐํ์ธ์.
์ ๋ ฌ
MongoDB 4.4 ์ ๋ฐฐ์ด ํ๋์ ๋ํ ์ ๋ ฌ ๋์์ด ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ก, ๋ฉํฐํค ์ธ๋ฑ์ค ๋ก ์ธ๋ฑ์ฑ๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ์ฟผ๋ฆฌ ๊ณํ์๋ ๋ธ๋กํน ์ ๋ ฌ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ชจ๋ ์ ๋ ฌ ํ๋์ ์ธ๋ฑ์ค ๊ฒฝ๊ณ ๋
[MinKey, MaxKey]
์ด๋ฉฐ ,๋ฉํฐํค ์ธ๋ฑ์ค ํ๋์ ๊ฒฝ๊ณ์๋ ์ ๋ ฌ ํจํด๊ณผ ๋์ผํ ๊ฒฝ๋ก ์ ๋์ฌ๊ฐ ์์ต๋๋ค.
์ค๋ ํค
๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ค๋ ํค ์ธ๋ฑ์ค๋ก ์ง์ ํ ์ ์์ต๋๋ค .
๊ทธ๋ฌ๋ ์ค๋ ํค ์ธ๋ฑ์ค๊ฐ ๋ณตํฉ ์ธ๋ฑ์ค์ ์ ๋์ฌ ์ธ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํค ์ค ํ๋๊ฐ (์ฆ, ์ค๋ ํค์ ์ผ๋ถ๊ฐ ์๋ ํค)๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ฑํฉ๋๋ค. ๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
ํด์ ์ธ๋ฑ์ค
ํด์๋ ์ธ๋ฑ์ค๋ ๋ฉํฐํค์ผ ์ ์์ต๋๋ค .
์ง์๋๋ ์ฟผ๋ฆฌ
๋ฉํฐํค ์ธ๋ฑ์ค๋ ๋ค์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๊ฐ ๋ฐฐ์ด ํ๋๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค(์ฆ, ๋ฐฐ์ด์ด ์ฟผ๋ฆฌ ํ๋ก์ ์ ์ ํฌํจ๋์ง ์์ต๋๋ค). ์ฆ, ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ค์ค ํค ์ธ๋ฑ์ค๊ฐ ๋ณตํฉ์ด์ด์ผ ํฉ๋๋ค.
$elemMatch
๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.๋ค๋ฅธ ๋ชจ๋ ์ง์๋๋ ์ฟผ๋ฆฌ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฌํ ๋ฌธ์๊ฐ ํฌํจ๋matches
์ปฌ๋ ์
์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค:
db.matches.insertMany( [ { name: "Joe", event: [ "open", "tournament" ] }, { name: "Bill", event: [ "match", "championship" ] } ] )
matches
์ปฌ๋ ์
์ event
๋ฐ name
ํ๋์ ๋ณตํฉ ๋ค์ค ํค ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
db.matches.createIndex( { event: 1, name: 1 } )
event
ํ๋์ ๋ฐฐ์ด ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ด์ ์ธ๋ฑ์ค๋ ๋ฉํฐํค์
๋๋ค.
์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฃน๋๋ค.
db.matches.find( { event: 'championship' }, { _id: 0, name: 1 } ) db.matches.find( { name: 'Bill', event: 'championship' }, { _id: 0, name: 1 } )
ํ๋ก์ ์
์ event
๋ฐฐ์ด ํ๋๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฟผ๋ฆฌ๋ ์ธ๋ฑ์ค์ ํฌํจ๋์ง ์์ต๋๋ค.
db.matches.find( { event: 'championship' }, { _id: 0, event: 1 } )
๋ฐฐ์ด ํ๋ ์ ์ฒด์ ๋ํ ์ฟผ๋ฆฌ
์ฟผ๋ฆฌ ํํฐ ๊ฐ ๋ฐฐ์ด ์ ์ฒด์ ๋ํด ์ ํํ ์ผ์นํ๋ ํญ๋ชฉ์ ์ง์ ํ๋ฉด MongoDB๋ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์กฐํํ ์ ์์ง๋ง ๋ฉํฐํค ์ธ๋ฑ์ค ์ค์บ์ ์ฌ์ฉํ์ฌ ์ ์ฒด ๋ฐฐ์ด์ ์ฐพ์ ์๋ ์์ต๋๋ค. ๋์ , ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์กฐํํ ํ MongoDB๋ ๊ด๋ จ ๋ฌธ์๋ฅผ ๊ฒ์ํ๊ณ ๋ฐฐ์ด์ด ์ฟผ๋ฆฌ์ ๋ฐฐ์ด๊ณผ ์ผ์นํ๋ ๋ฌธ์๋ฅผ ํํฐ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ๋ฌธ์๊ฐ ํฌํจ๋ inventory
collection์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
{ _id: 5, type: "food", item: "aaa", ratings: [ 5, 8, 9 ] } { _id: 6, type: "food", item: "bbb", ratings: [ 5, 9 ] } { _id: 7, type: "food", item: "ccc", ratings: [ 9, 5, 8 ] } { _id: 8, type: "food", item: "ddd", ratings: [ 9, 5 ] } { _id: 9, type: "food", item: "eee", ratings: [ 5, 9, 5 ] }
collection์ ratings
ํ๋์ ๋ํ ๋ฉํฐํค ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค.
db.inventory.createIndex( { ratings: 1 } )
๋ค์ ์ฟผ๋ฆฌ๋ ratings
ํ๋๊ฐ [ 5, 9 ]
๋ฐฐ์ด์ธ ๋ฌธ์๋ฅผ ์ฐพ์ต๋๋ค.
db.inventory.find( { ratings: [ 5, 9 ] } )
MongoDB๋ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ratings
๋ฐฐ์ด์ ์์ ์์น์ 5
๊ฐ ์๋ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ MongoDB๋ ์ด๋ฌํ ๋ฌธ์๋ฅผ ์กฐํํ๊ณ ratings
๋ฐฐ์ด์ด ์ฟผ๋ฆฌ ๋ฐฐ์ด [ 5, 9 ]
์ ๋์ผํ ๋ฌธ์๋ฅผ ํํฐ๋งํฉ๋๋ค.
$expr
$expr
๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
์์
๊ธฐ๋ณธ ๋ฐฐ์ด ์ธ๋ฑ์ค
๋ค์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ survey
์ปฌ๋ ์
์ ๋ง๋ญ๋๋ค.
db.survey.insertOne( { _id: 1, item: "ABC", ratings: [ 2, 5, 9 ] } )
ํ๋ ratings
์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.
db.survey.createIndex( { ratings: 1 } )
ratings
ํ๋์ ๋ฐฐ์ด์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ratings
์ ์ธ๋ฑ์ค๋ ๋ฉํฐํค์
๋๋ค. ๋ฉํฐํค ์ธ๋ฑ์ค์๋ ๊ฐ๊ฐ ๋์ผํ ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ค์ ์ธ ๊ฐ์ ์ธ๋ฑ์ค ํค๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
2
,5
๋ฐ9
.
๋ด์ฅ๋ ๋ฌธ์๊ฐ ์๋ ๋ฐฐ์ด ์ธ๋ฑ์ค
์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด ํ๋์ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ค์ ํ์์ ๋ฌธ์๊ฐ ํฌํจ๋ inventory
์ปฌ๋ ์
์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
{ _id: 1, item: "abc", stock: [ { size: "S", color: "red", quantity: 25 }, { size: "S", color: "blue", quantity: 10 }, { size: "M", color: "blue", quantity: 50 } ] } { _id: 2, item: "def", stock: [ { size: "S", color: "blue", quantity: 20 }, { size: "M", color: "blue", quantity: 5 }, { size: "M", color: "black", quantity: 10 }, { size: "L", color: "red", quantity: 2 } ] } { _id: 3, item: "ijk", stock: [ { size: "M", color: "blue", quantity: 15 }, { size: "L", color: "blue", quantity: 100 }, { size: "L", color: "red", quantity: 25 } ] } ...
๋ค์ ์์
์ stock.size
๋ฐ stock.quantity
ํ๋์ ๋ฉํฐํค ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.inventory.createIndex( { "stock.size": 1, "stock.quantity": 1 } )
๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ ๋ค์ ์์์์์ ๊ฐ์ด ์ธ๋ฑ์ฑ๋ ํ๋๋ฅผ ๋ชจ๋ ํฌํจํ๋ ์กฐ๊ฑด์์ ์ธ๋ฑ์ค ์ ๋์ฌ "stock.size"
๋ง ํฌํจํ๋ ์กฐ๊ฑด์๊ฐ ๋ชจ๋ ํฌํจ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.inventory.find( { "stock.size": "M" } ) db.inventory.find( { "stock.size": "S", "stock.quantity": { $gt: 20 } } )
MongoDB๊ฐ ๋ฉํฐํค ์ธ๋ฑ์ค ๋ฐ์ด๋๋ฅผ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฉํฐ ํค ์ธ๋ฑ์ค ๋ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ณตํฉ ์ธ๋ฑ์ค ๋ฐ ์ ๋์ฌ์ ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณตํฉ ์ธ๋ฑ์ค ๋ฐ ์ ๋์ฌ๋ฅผ ์ฐธ์กฐํ์ธ์ .
๋ณตํฉ ๋ฉํฐํค ์ธ๋ฑ์ค๋ ๋ค์ ์์ ์ ๊ฐ์ ์ ๋ ฌ ์์ ๋ ์ง์ํ ์ ์์ต๋๋ค.
db.inventory.find( ).sort( { "stock.size": 1, "stock.quantity": 1 } ) db.inventory.find( { "stock.size": "M" } ).sort( { "stock.quantity": 1 } )
๋ณตํฉ ์ธ๋ฑ์ค์ ๋์ ๋ฐ ์ ๋ ฌ ์์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ ฌ์ ์ฐธ์กฐํ์ธ์.