Docs Menu
Docs Home
/ / /
Go ๋“œ๋ผ์ด๋ฒ„
/

Indexes

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ๊ฐœ์š”
  • ์ฟผ๋ฆฌ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฐ ์„ฑ๋Šฅ
  • ์šด์˜ ๊ณ ๋ ค ์‚ฌํ•ญ
  • ์ธ๋ฑ์Šค ์œ ํ˜•
  • ๋‹จ์ผ ํ•„๋“œ ์ธ๋ฑ์Šค
  • ๋ณตํ•ฉ ์ธ๋ฑ์Šค
  • ๋‹ค์ค‘ ํ‚ค ์ธ๋ฑ์Šค(๋ฐฐ์—ด ํ•„๋“œ์˜ ์ธ๋ฑ์Šค)
  • ํด๋Ÿฌ์Šคํ„ฐํ™”๋œ ์ธ๋ฑ์Šค
  • Text Indexes
  • ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ธ๋ฑ์Šค
  • Unique Indexes
  • ์ธ๋ฑ์Šค ์ œ๊ฑฐ
  • ์ถ”๊ฐ€ ์ •๋ณด
  • API ๋ฌธ์„œ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” MongoDB Go ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋Š” MongoDB์—์„œ ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” MongoDB๋Š” collection์˜ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์Šค์บ”ํ•ด (์ปฌ๋ ‰์…˜ ์Šค์บ”) ์ฟผ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜ ์Šค์บ”์€ ์†๋„๊ฐ€ ๋Š๋ ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด MongoDB๊ฐ€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฌธ์„œ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ

์—…๋ฐ์ดํŠธ ์ž‘์—…, ์‚ญ์ œ ์ž‘์—… ๋ฐ ํŠน์ • ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB์˜ ์ฟผ๋ฆฌ์—๋Š” ๋‹ค์Œ ์š”์†Œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์†Œ
ํ•„์š”์„ฑ
๋ชฉ์ 

์ฟผ๋ฆฌ

ํ•„์ˆ˜ ์‚ฌํ•ญ

์ฐพ๊ณ ์ž ํ•˜๋Š” ํ•„๋“œ์™€ ๊ฐ’ ์ง€์ •.

์˜ต์…˜

์˜ต์…˜

์ฟผ๋ฆฌ ์‹คํ–‰ ๋ฐฉ๋ฒ• ์ง€์ •.

ํ”„๋กœ์ ์…˜

์˜ต์…˜

MongoDB๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•„๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

Sort

์˜ต์…˜

MongoDB๊ฐ€ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆœ์„œ ์ง€์ •.

์ด๋Ÿฌํ•œ ์š”์†Œ๋ฅผ ๋™์ผํ•œ ์ธ๋ฑ์Šค์— ์ง€์ •ํ•˜๋ฉด MongoDB๋Š” ์ธ๋ฑ์Šค์—์„œ ์ง์ ‘ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ด๋ฅผ ์ปค๋ฒ„ ์ฟผ๋ฆฌ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์ •๋ ฌ ๊ธฐ์ค€

์ •๋ ฌ ๊ธฐ์ค€์€ ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ์™€ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜์ „๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

name ํ•„๋“œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ (A-Z) ์œผ๋กœ age ์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ (9-0) ์œผ๋กœ ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

name_1_age_-1

MongoDB๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • name ์˜ค๋ฆ„์ฐจ์ˆœ, age ๋‚ด๋ฆผ์ฐจ์ˆœ

  • name ๋‚ด๋ฆผ์ฐจ์ˆœ, age ์˜ค๋ฆ„์ฐจ์ˆœ

name ๋ฐ age์— ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ name ๋ฐ age์— ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์ธ๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ์ฟผ๋ฆฌ ๊ธฐ์ค€ ๋ฐ ํ”„๋กœ์ ์…˜์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฟผ๋ฆฌ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๋ ค๋ฉด ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ์™€ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž‘์—…์— ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ํ•„๋“œ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”. ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ ์ธ๋ฑ์Šค๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์šฉ๋Ÿ‰ ๊ณ„ํš์„ ์œ„ํ•ด ์ธ๋ฑ์Šค ๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์“ฐ๊ธฐ ์ž‘์—…์ด ์ธ๋ฑ์‹ฑ๋œ ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋Š” MongoDB๋„ ๊ด€๋ จ ์ธ๋ฑ์Šค๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

MongoDB๋Š” ๋™์  ์Šคํ‚ค๋งˆ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋ฆ„์ด ์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ž„์˜์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•„๋“œ์— ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB 4.2๋Š” ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์™€์ผ๋“œ์นด๋“œ ์ธ๋ฑ์Šค๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ ์ธ๋ฑ์Šค๋Š” ์›Œํฌ๋กœ๋“œ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ๊ณ„ํš์„ ๋Œ€์ฒดํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•œ ์ธ๋ฑ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ธ๋ฑ์‹ฑ ์ „๋žต ๋ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฐ ์ธ๋ฑ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

MongoDB๋Š” ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ธ๋ฑ์Šค ์œ ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค ์œ ํ˜• ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์œ ํ˜• ์ „์ฒด ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹จ์ผ ํ•„๋“œ ์ธ๋ฑ์Šค๋Š” collection ๋ฌธ์„œ ๋‚ด์˜ ํ•„๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ธ๋ฑ์Šค๋Š” ๋‹จ์ผ ํ•„๋“œ ์ฟผ๋ฆฌ ๋ฐ ์ •๋ ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ปฌ๋ ‰์…˜์—์„œ ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” TTL ์ธ๋ฑ์Šค์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

_id_ ์ธ๋ฑ์Šค๋Š” ๋‹จ์ผ ํ•„๋“œ ์ธ๋ฑ์Šค์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค๋Š” ์ƒˆ collection์„ ์ƒ์„ฑํ•  ๋•Œ _id ํ•„๋“œ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” sample_mflix.movies collection์˜ title ํ•„๋“œ์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ด…๋‹ˆ๋‹ค.

coll := client.Database("sample_mflix").Collection("movies")
indexModel := mongo.IndexModel{
Keys: bson.D{{"title", 1}},
}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
Name of Index Created: title_1

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” collection ๋ฌธ์„œ ๋‚ด์˜ ์—ฌ๋Ÿฌ ํ•„๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค๋Š” ์ฟผ๋ฆฌ ๋ฐ ์ •๋ ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” sample_mflix.movies collection์˜ fullplot ๋ฐ title ํ•„๋“œ์— ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

coll := client.Database("sample_mflix").Collection("movies")
indexModel := mongo.IndexModel{
Keys: bson.D{
{"fullplot", -1},
{"title", 1}
}
}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
Name of Index Created: fullplot_-1_title_1

๋‹ค์ค‘ ํ‚ค ์ธ๋ฑ์Šค๋Š” ๋‹จ์ผ ํ•„๋“œ ์ธ๋ฑ์Šค ๋ฐ ๋ณตํ•ฉ ์ธ๋ฑ์Šค์™€ ๋™์ผํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ํ•„๋“œ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ง€์ •ํ•˜๋Š” ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” sample_mflix.movies ์ปฌ๋ ‰์…˜์˜ cast ํ•„๋“œ์— ๋ฉ€ํ‹ฐํ‚ค ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

coll := client.Database("sample_mflix").Collection("movies")
indexModel := mongo.IndexModel{
Keys: bson.D{{"cast", -1}}
}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
Name of Index Created: cast_-1

ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ปฌ๋ ‰์…˜์—์„œ ์‚ฝ์ž…๊ณผ ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ ์ž‘์—…์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๋Š” ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ปฌ๋ ‰์…˜์€ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด collection์„ ์ƒ์„ฑํ•  ๋•Œ _id ํ•„๋“œ๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ ์œ  ํ•„๋“œ๋ฅผ true๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค ์˜ต์…˜์„ ์ง€์ •ํ•˜์„ธ์š”.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” db.tea collection์˜ _id ํ•„๋“œ์— ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

db := client.Database("db")
cio := bson.D{{"key", bson.D{{"_id", 1}}}, {"unique", true}}
opts := options.CreateCollection().SetClusteredIndex(cio)
db.CreateCollection(context.TODO(), "tea", opts)

ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋Š” ๋ฌธ์ž์—ด ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ๋ฑ์Šค์—๋Š” ๋ฌธ์ž์—ด ํ•„๋“œ ๋˜๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MongoDB๋Š” ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ ์–ธ์–ด๋ฅผ ์˜ต์…˜์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์—๋Š” ํ•˜๋‚˜์˜ ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ…์ŠคํŠธ ํ•„๋“œ์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์€ ๋ณตํ•ฉ ์ธ๋ฑ์Šค ๋‚ด์˜ ๋ชจ๋“  ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํŒ

ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋Š” ๋” ๊ฐ•๋ ฅํ•œ Atlas Full Text Search ์ธ๋ฑ์Šค์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Atlas ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ Atlas ๊ฒ€์ƒ‰์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” sample_mflix.movies ์ปฌ๋ ‰์…˜์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋กœ italian ์‚ฌ์šฉํ•˜์—ฌ plot ํ•„๋“œ์— ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

coll := client.Database("sample_mflix").Collection("movies")
indexModel := mongo.IndexModel{Keys: bson.D{{"plot", "text"}, {"default_language", "italian"}}}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
Name of Index Created: plot_text

MongoDB๋Š” 2dsphere ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๋ฆฌ ๊ณต๊ฐ„ ์ขŒํ‘œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. 2dsphere ์ธ๋ฑ์Šค๊ฐ€ GeoJSON ๊ฐ์ฒด ํ•„๋“œ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€๋ฆฌ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜์—ฌ ํฌํ•จ ์—ฌ๋ถ€, ๊ต์ฐจ์ , ๊ทผ์ ‘์„ฑ ํ™•์ธ

  • ์œ ํด๋ฆฌ๋“œ ํ‰๋ฉด์—์„œ์˜ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ MongoDB 2.2 ์ดํ•˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” '๋ ˆ๊ฑฐ์‹œ ์ขŒํ‘œ ์Œ' ๊ตฌ๋ฌธ ์ž‘์—…

sample_mflix.theaters ์ปฌ๋ ‰์…˜์˜ ๋ฌธ์„œ ๋‚ด location.geo ํ•„๋“œ๋Š” ๊ทน์žฅ์˜ ์ขŒํ‘œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” GeoJSON ํฌ์ธํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

{
"_id" : ObjectId("59a47286cfa9a3a73e51e75c"),
"theaterId" : 104,
"location" : {
"address" : {
"street1" : "5000 W 147th St",
"city" : "Hawthorne",
"state" : "CA",
"zipcode" : "90250"
},
"geo" : {
"type" : "Point",
"coordinates" : [
-118.36559,
33.897167
]
}
}
}

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” location.geo ํ•„๋“œ์— 2dsphere ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์ง€๋ฆฌ ๊ณต๊ฐ„ ์ธ๋ฑ์Šค์— ํฌํ•จ๋œ ํ•„๋“œ์— ์ง€๋ฆฌ ๊ณต๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

indexModel := mongo.IndexModel{
Keys: bson.D{{"location.geo", "2dsphere"}}
}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
location.geo_2dsphere

๊ณ ์œ  ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค๋œ ํ•„๋“œ์— ์ค‘๋ณต ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ MongoDB๋Š” _id ํ•„๋“œ ์ƒ์„ฑ ์‹œ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋Š” ํ•„๋“œ ๋˜๋Š” ํ•„๋“œ ์กฐํ•ฉ์„ ์ง€์ •ํ•˜๊ณ  unique ์˜ต์…˜์„ true ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” theaterId ํ•„๋“œ์— ๊ณ ์œ ํ•œ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

indexModel := mongo.IndexModel{
Keys: bson.D{{"theaterId", -1}},
Options: options.Index().SetUnique(true),
}
name, err := coll.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
panic(err)
}
fmt.Println("Name of Index Created: " + name)
Name of Index Created: theaterId_-1

_id ํ•„๋“œ ์˜ ๊ธฐ๋ณธ๊ฐ’ ๊ณ ์œ  ์ธ๋ฑ์Šค ์ œ์™ธํ•œ ์ปฌ๋ ‰์…˜ ์—์„œ ๋ชจ๋“  ์ธ๋ฑ์Šค ์‚ญ์ œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์ œ๊ฑฐ ํ•˜๋ ค๋ฉด DropOne() ๋ฉ”์„œ๋“œ์— ์ธ๋ฑ์Šค ์ด๋ฆ„์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” title_1 sample_mflix.movies collection์—์„œ (์ด)๋ผ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

coll := client.Database("sample_mflix").Collection("movies")
err := coll.Indexes().DropOne(context.TODO(), "title_1")
if err != nil {
panic(err)
}

์–ธ๊ธ‰๋œ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์–ธ๊ธ‰๋œ ์ž‘์—…์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ์ฟผ๋ฆฌ ์ง€์ •

  • ๋ฌธ์„œ ์ˆ˜์ •

  • ๋ฌธ์„œ ์‚ญ์ œ

์ด ๊ฐ€์ด๋“œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ API ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ์•„๊ฐ€๊ธฐ

์ง‘๊ณ„