cursor.collation()
์ ์
cursor.collation(<collation document>)
์ค์
Mongo์ฌ ๋ฐฉ๋ฒ
์ด ํ์ด์ง์์๋
mongosh
๋ฉ์๋๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ด๋ Node.js์ ๊ฐ์ ์ธ์ด๋ณ ๋๋ผ์ด๋ฒ์ ๋ํ ์ค๋ช ์๊ฐ ์๋๋๋ค.MongoDB API ๋๋ผ์ด๋ฒ์ ๊ฒฝ์ฐ ์ธ์ด๋ณ MongoDB ๋๋ผ์ด๋ฒ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์
db.collection.find()
๋ฐํํ ์ปค์ ์ ๋ํ ๋ฐ์ดํฐ์ ๋ ฌ ์ ์ง์ ํฉ๋๋ค. ์ฌ์ฉํ๋ ค๋ฉดdb.collection.find()
์ ์ถ๊ฐํ์ธ์.cursor.collation()
๋ ๋ค์ ๋ฐ์ดํฐ ์ ๋ ฌ ๋ฌธ์๋ฅผ ํ์ฉํฉ๋๋ค.{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๋
locale
ํ๋๋ ํ์์ด๊ณ , ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ ํ๋๋ ๋ชจ๋ ์ ํ ์ฌํญ์ ๋๋ค. ํ๋์ ๋ํ ์ค๋ช ์ ๋ฐ์ดํฐ ์ ๋ ฌ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.ํ๋์ ํ์ค๋ชlocale
๋ฌธ์์ด
ICU ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ . ์ง์๋๋ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ๋ชฉ๋ก์ ์ง์๋๋ ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋จ์ ์ด์ง ๋น๊ต๋ฅผ ์ง์ ํ๋ ค๋ฉด
"simple"
์locale
๊ฐ์ ์ง์ ํฉ๋๋ค.strength
integer
์ ํ ์ฌํญ์ ๋๋ค. ์ํํ ๋น๊ต ์์ค์ ๋๋ค. ICU ๋น๊ต ์์ค์ ํด๋นํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ค๋ช1
1์ฐจ ๋น๊ต ์์ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ๋ถ์ ๋ถํธ ๋ฐ ๋์๋ฌธ์์ ๊ฐ์ ๋ค๋ฅธ ์ฐจ์ด์ ์ ๋ฌด์ํ๊ณ ๊ธฐ๋ณธ ๋ฌธ์๋ง ๋น๊ตํฉ๋๋ค.
2
์ธ์ปจ๋๋ฆฌ ๋น๊ต ์์ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ๋ถ์ ๋ถํธ์ ๊ฐ์ ์ด์ฐจ์ ์ธ ์ฐจ์ด๊น์ง ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. ์ฆ, ๋ฐ์ดํฐ ์ ๋ ฌ์ ๊ธฐ๋ณธ ๋ฌธ์(1์ฐจ ์ฐจ์ด)์ ๋ถ์ ๋ถํธ(2์ฐจ ์ฐจ์ด)์ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฌธ์ ๊ฐ์ ์ฐจ์ด๋ ๋ถ์ ๋ถํธ ๊ฐ์ ์ฐจ์ด๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
3
3์ฐจ ๋น๊ต ์์ค. ๋์กฐ๋ ๋์๋ฌธ์ ๋ฐ ๋ฌธ์ ๋ณํ๊ณผ ๊ฐ์ 3์ฐจ ์ฐจ์ด๊น์ง ๋น๊ต๋ฅผ ์ํํฉ๋๋ค. ์ฆ, ๋ฐ์ดํฐ ์ ๋ ฌ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฌธ์ (์ฃผ์ ์ฐจ์ด์ ), ๋ถ์ ๋ถํธ (2์ฐจ ์ฐจ์ด), ๋์๋ฌธ์ ๋ฐ ๋ณํ (3์ฐจ ์ฐจ์ด) ์ ๋น๊ตํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฌธ์ ๊ฐ์ ์ฐจ์ด๋ 2์ฐจ ์ฐจ์ด๋ณด๋ค ์ฐ์ ํ๋ฉฐ, 2์ฐจ ์ฐจ์ด๋ 3์ฐจ ์ฐจ์ด๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
์ด๊ฒ์ด ๊ธฐ๋ณธ ์์ค์ ๋๋ค.
4
4์ฐจ ์์ค. 1-3์ฐจ ์์ค์์ ๊ตฌ๋์ ์ ๋ฌด์ํ๊ฑฐ๋ ์ผ๋ณธ์ด ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ๊ตฌ๋์ ์ ๊ณ ๋ คํ๋๋ก ํน์ ์ฌ์ฉ ์ฌ๋ก๋ก ์ ํ๋ฉ๋๋ค.
5
๋์ผํ ์์ค. ํ์ด ๋ธ๋ ์ด์ปค (tie breaker)์ ํน์ ์ฌ์ฉ ์ฌ๋ก์๋ ์ ํ์ด ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ICU ๋ฐ์ดํฐ ์ ๋ ฌ: ๋น๊ต ์์ค ํญ๋ชฉ์ ์ฐธ์กฐํ์ธ์.
caseLevel
๋ถ์ธ
์ ํ ์ฌํญ์ ๋๋ค.
strength
์์ค1
๋๋2
์์ ๋/์๋ฌธ์ ๋น๊ต๋ฅผ ํฌํจํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ์ ๋๋ค.true
์ธ ๊ฒฝ์ฐ ๋์๋ฌธ์ ๋น๊ต๋ฅผ ํฌํจํฉ๋๋ค. ์ฆstrength:1
์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ ๋ ฌ์ ๊ธฐ๋ณธ ๋ฌธ์์ ๋/์๋ฌธ์๋ฅผ ๋น๊ตํฉ๋๋ค.strength:2
์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ ๋ ฌ์ ๊ธฐ๋ณธ ๋ฌธ์, ๋ถ์ ๋ถํธ(๋ฐ ๊ธฐํ ๊ฐ๋ฅํ 2์ฐจ ์ฐจ์ด) ๋ฐ ๋/์๋ฌธ์๋ฅผ ๋น๊ตํฉ๋๋ค.
false
์ธ ๊ฒฝ์ฐ1
๋๋2
์์ค์์ ๋์๋ฌธ์ ๋น๊ต๋ฅผ ํฌํจํ์ง ๋ง์ธ์. ๊ธฐ๋ณธ๊ฐ์false
์ ๋๋ค.์์ธํ ๋ด์ฉ์ ICU ๋ฐ์ดํฐ ์ ๋ ฌ: ์ฌ๋ก ์์ค์ ์ฐธ์กฐํ์ญ์์ค.
caseFirst
๋ฌธ์์ด
์ ํ ์ฌํญ. 3์ฐจ ์์ค ๋น๊ต ์ ๋์๋ฌธ์ ์ฐจ์ด์ ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ ํ๋์ ๋๋ค.
๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ค๋ช"upper"
๋๋ฌธ์๊ฐ ์๋ฌธ์๋ณด๋ค ๋จผ์ ์ ๋ ฌ๋ฉ๋๋ค.
"lower"
์๋ฌธ์๊ฐ ๋๋ฌธ์๋ณด๋ค ๋จผ์ ์ ๋ ฌ๋ฉ๋๋ค.
"OFF"
๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
"lower"
์ ๋น์ทํ์ง๋ง ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ฐจ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ https://unicode-org.github.io/icu/userguide/strings/properties.html#customization์ ์ฐธ์กฐํ์ธ์.numericOrdering
๋ถ์ธ
์ ํ ์ฌํญ. ์ซ์ ๋ฌธ์์ด์ ์ซ์๋ก ๋น๊ตํ ์ง, ์๋๋ฉด ๋ฌธ์์ด๋ก ๋น๊ตํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ์ ๋๋ค.
true
์ธ ๊ฒฝ์ฐ ์ซ์๋ก ๋น๊ตํฉ๋๋ค. ์ฆ,"10"
๊ฐ"2"
๋ณด๋ค ํฝ๋๋ค.false
์ธ ๊ฒฝ์ฐ ๋ฌธ์์ด๋ก ๋น๊ตํฉ๋๋ค. ์ฆ,"10"
๊ฐ"2"
๋ณด๋ค ์์ต๋๋ค.๊ธฐ๋ณธ๊ฐ์
false
์ ๋๋ค.alternate
๋ฌธ์์ด
์ ํ ์ฌํญ. ๋น๊ต๋ฅผ ์ํด ๋ฐ์ดํฐ ์ ๋ ฌ์์ ๊ณต๋ฐฑ๊ณผ ๋ฌธ์ฅ ๋ถํธ๋ฅผ ๊ธฐ๋ณธ ๋ฌธ์๋ก ๊ณ ๋ คํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋์ ๋๋ค.
๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ค๋ช"non-ignorable"
๊ณต๋ฐฑ๊ณผ ๋ฌธ์ฅ ๋ถํธ๋ ๊ธฐ๋ณธ ๋ฌธ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
"shifted"
๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์ ๊ธฐ๋ณธ ๋ฌธ์๋ก ๊ฐ์ฃผ๋์ง ์์ผ๋ฉฐ ๊ฐ๋ ์์ค์ด 3๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง ๊ตฌ๋ณ๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ICU ๋ฐ์ดํฐ ์ ๋ ฌ: ๋น๊ต ์์ค ํญ๋ชฉ์ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ๊ฐ์
"non-ignorable"
์ ๋๋ค.maxVariable
๋ฌธ์์ด
์ ํ ์ฌํญ.
alternate: "shifted"
์ผ ๋ ๋ฌด์ํ ์ ์๋ ๋ฌธ์๋ก ๊ฐ์ฃผ๋๋ ๋ฌธ์๋ฅผ ๊ฒฐ์ ํ๋ ํ๋์ ๋๋ค.alternate: "non-ignorable"
์ธ ๊ฒฝ์ฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ค๋ช"punct"
๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์ ๋ชจ๋ "๋ฌด์ํ ์ ์์ต๋๋ค", ์ฆ ๊ธฐ๋ณธ ๋ฌธ์๋ก ๊ฐ์ฃผ๋์ง ์์ต๋๋ค.
"space"
๊ณต๋ฐฑ์ "๋ฌด์ํ ์ ์๋" ๋ฌธ์๋ก, ๊ธฐ๋ณธ ๋ฌธ์๋ก ๊ฐ์ฃผ๋์ง ์์ต๋๋ค.
backwards
๋ถ์ธ
์ ํ ์ฌํญ. ์ผ๋ถ ํ๋์ค์ด ์ฌ์ ์์์ ๊ฐ์ด ๋ถ์ ๋ถํธ๊ฐ ์๋ ๋ฌธ์์ด์ ๋ฌธ์์ด ๋ค์ชฝ๋ถํฐ ์ ๋ ฌํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ์ ๋๋ค.
true
์ด๋ฉด ๋ค์ชฝ์์ ์์ชฝ์ผ๋ก ๋น๊ตํฉ๋๋ค.false
์ด๋ฉด ์์ชฝ์์ ๋ค์ชฝ์ผ๋ก ๋น๊ตํฉ๋๋ค.๊ธฐ๋ณธ๊ฐ์
false
์ ๋๋ค.normalization
๋ถ์ธ
์ ํ ์ฌํญ. ํ ์คํธ์ ์ ๊ทํ๊ฐ ํ์ํ์ง ํ์ธํ๊ณ ์ ๊ทํ๋ฅผ ์ํํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ํ ์คํธ์๋ ์ด๋ฌํ ์ ๊ทํ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
true
์ธ ๊ฒฝ์ฐ ์์ ํ ์ ๊ทํ๋์๋์ง ํ์ธํ๊ณ ์ ๊ทํ๋ฅผ ์ํํ์ฌ ํ ์คํธ๋ฅผ ๋น๊ตํฉ๋๋ค.false
์ด๋ฉด ํ์ธํ์ง ์์ต๋๋ค.๊ธฐ๋ณธ๊ฐ์
false
์ ๋๋ค.์์ธํ ๋ด์ฉ์ https://unicode-org.github.io/icu/userguide/collation/concepts.html#normalization์ ์ฐธ์กฐํ์ธ์.
ํธํ์ฑ
์ด ๋ฉ์๋๋ ๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
์ฐธ๊ณ
์ด ๋ช ๋ น์ ๋ชจ๋ MongoDB Atlas ํด๋ฌ์คํฐ์์ ์ง์๋ฉ๋๋ค. ๋ชจ๋ ๋ช ๋ น์ ๋ํ Atlas ์ง์์ ๊ดํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ญ์์ค.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
์์
๋ค์ ๋ฌธ์๊ฐ ํฌํจ๋ foo
์ปฌ๋ ์
์ ์๊ฐํด ๋ณด์ธ์.
{ "_id" : 1, "x" : "a" } { "_id" : 2, "x" : "A" } { "_id" : 3, "x" : "รก" }
๋ค์ ์์
์ x: "a"
์ ์ฟผ๋ฆฌ ํํฐ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์ฐ์ฐ์๋ locale: "en_US"
(๋ฏธ๊ตญ ์์ด ๊ตญ๊ฐ ๋ฐ ์ธ์ด ์ค์ ) ๋ฐ strength: 1
(๊ธฐ๋ณธ ๋ฌธ์๋ง ๋น๊ต, ๋์๋ฌธ์ ๋ฐ ๋ฐ์ ๊ตฌ๋ณ ๋ถํธ ๋ฌด์)์ด(๊ฐ) ์๋ ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์
๋ ํฌํจ๋์ด ์์ต๋๋ค.
db.foo.find( { x: "a" } ).collation( { locale: "en_US", strength: 1 } )
์ด ์์ ์ ๋ค์ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
{ "_id" : 1, "x" : "a" } { "_id" : 2, "x" : "A" } { "_id" : 3, "x" : "รก" }
๋ฐ์ดํฐ ์ ๋ ฌ(์: db.collection.find( { x:
"a" } )
)์ ์ง์ ํ์ง ์์ผ๋ฉด ์ฟผ๋ฆฌ๋ ๋ค์ ๋ฌธ์์๋ง ์ผ์นํฉ๋๋ค.
db.foo.find( { x: "a" } )
cursor.sort()
๋ฐ cursor.count()
์ ๊ฐ์ ๋ค๋ฅธ ์ปค์ ๋ฉ์๋๋ฅผ cursor.collation()
์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
db.collection.find({...}).collation({...}).sort({...}); db.collection.find({...}).collation({...}).count();
์ฐธ๊ณ
ํ ์ฐ์ฐ์ ๋ํด ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ ๋ ฌ๊ณผ ํจ๊ป ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ ์ ์ ๋ ฌ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค.