๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค
์ด ํ์ด์ง์ ๋ด์ฉ
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ string ๋น๊ต๋ฅผ ์ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๊ฒ์ ๋ฐ์ดํฐ ์ ๋ ฌ์์ ํ์๋ฉ๋๋ค.
์ค์
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ ์ผ๋ฐ์ ์ผ๋ก $regex
์ฟผ๋ฆฌ์ ๋ํ ์ฑ๋ฅ์ ํฅ์์ํค์ง ์์ต๋๋ค. $regex
๊ตฌํ์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ธ์ํ์ง ๋ชปํ๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ช ๋ น ๊ตฌ๋ฌธ
collation
์ต์
์ ์ง์ ํ์ฌ db.collection.createIndex()
๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
db.collection.createIndex( { <field>: <sortOrder> }, { collation: { locale : <locale>, strength : < 1 | 2 > } } )
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค์ ๋ํ ๋์กฐ๋ฅผ ์ง์ ํ๋ ค๋ฉด collation
๊ฐ์ฒด์ ๋ค์ ํ๋๋ฅผ ํฌํจํฉ๋๋ค.
ํ๋ | ์ค๋ช
|
---|---|
| ์ธ์ด ๊ท์น์ ์ง์ ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ๋ชฉ๋ก์ ์ง์๋๋ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ์ ์ฐธ์กฐํ์ธ์. |
| ๋น๊ต ๊ท์น์ ๊ฒฐ์ ํฉ๋๋ค. |
์ถ๊ฐ ๋ฐ์ดํฐ ์ ๋ ฌ ํ๋์ ๋ํด์๋ ๋ฐ์ดํฐ ์ ๋ ฌ์์ฐธ์กฐํ์ธ์.
ํ๋
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ์ฟผ๋ฆฌ ๋ฐ ์ ๋ ฌ ์์ ์์ ์ธ๋ฑ์ค์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ ์๋์ด ์๋ค๋ฉด, ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ธ๋ฑ์ค๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์๋ ํ ํด๋น ๋ฐ์ดํฐ ์ ๋ ฌ์ ์์ํฉ๋๋ค.
์์
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค ์์ฑ
๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ปฌ๋ ์
์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ strength
๋งค๊ฐ๋ณ์๋ฅผ 1
๋๋ 2
๋ก ์ค์ ํฉ๋๋ค(strength
๋งค๊ฐ๋ณ์์ ๋ํ ์์ธํ ์ค๋ช
์ ๋ฐ์ดํฐ ์ ๋ ฌ ์ฐธ์กฐ). ์ธ๋ฑ์ค ์์ค ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฟผ๋ฆฌ ์์ค์์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํด์ผ ํฉ๋๋ค.
๋ค์ ์์์์๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ์ปฌ๋ ์
์ ๋ง๋ ๋ค์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ type
ํ๋์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
db.createCollection("fruit") db.fruit.createIndex( { type: 1 }, { collation: { locale: 'en', strength: 2 } } )
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฟผ๋ฆฌ์์ ๋์ผํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํด์ผ ํฉ๋๋ค.
db.fruit.insertMany( [ { type: "apple" }, { type: "Apple" }, { type: "APPLE" } ] ) db.fruit.find( { type: "apple" } ) // does not use index, finds one result db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 2 } ) // uses the index, finds three results db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 1 } ) // does not use the index, finds three results
๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ์ปฌ๋ ์ ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ธ๋ฑ์ค
๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์ ์ ๋ง๋ค ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ง ์๋ ํ ์ดํ์ ์์ฑํ๋ ๋ชจ๋ ์ธ๋ฑ์ค๊ฐ ํด๋น ๋ฐ์ดํฐ ์ ๋ ฌ์ ์์ํฉ๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ง ์๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์์ํฉ๋๋ค.
๋ค์ ์์์์๋ names
์ด๋ผ๋ ๊ธฐ๋ณธ๊ฐ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ปฌ๋ ์
์ ๋ง๋ ๋ค์ first_name
ํ๋์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.
db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } ) db.names.createIndex( { first_name: 1 } ) // inherits the default collation
์ด๋ฆ์ ์์ ์ปฌ๋ ์ ์ ์ฝ์ ํฉ๋๋ค.
db.names.insertMany( [ { first_name: "Betsy" }, { first_name: "BETSY"}, { first_name: "betsy"} ] )
์ด ์ปฌ๋ ์ ์ ๋ํ ์ฟผ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ ์ฌ์ฉํฉ๋๋ค.
db.names.find( { first_name: "betsy" } ) // inherits the default collation: { collation: { locale: 'en_US', strength: 2 } } // finds three results
์ ์์
์ ์ปฌ๋ ์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๊ณ ์ธ ๋ฌธ์๋ฅผ ๋ชจ๋ ์ฐพ์ต๋๋ค. ๋ ๋์ ์ฑ๋ฅ์ ์ํด first_name
ํ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฟผ๋ฆฌ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ์ฌ ์ด ์ปฌ๋ ์ ์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ฒ์ํ ์๋ ์์ต๋๋ค.
db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } ) // does not use the collection's default collation, finds one result
์ ์์
์ strength
๊ฐ์ด ์ง์ ๋์ง ์์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ฌธ์๋ง ์ฐพ์ต๋๋ค. ์ปฌ๋ ์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.