Docs Menu

ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ž‘์—…

๊ฑฐ๋ž˜์˜ ๊ฒฝ์šฐ:

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

  • ํŠธ๋žœ์žญ์…˜์— ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋ ‰์…˜์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ฐธ๊ณ 

    ์ƒค๋“œ ๊ฐ„ ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์ƒˆ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ ์ƒค๋“œ์—์„œ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์— ์“ฐ๊ณ  ๋‹ค๋ฅธ ์ƒค๋“œ์—์„œ ์•”์‹œ์ ์œผ๋กœ ์ƒˆ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, MongoDB๋Š” ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋‘ ์ž‘์—…์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ œํ•œ๋œ ์ปฌ๋ ‰์…˜์—๋Š” ์“ธ (write) ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์—์„œ ์ฝ์„ ๋•Œ๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (MongoDB 5.0๋ถ€ํ„ฐ ๋„์ž…๋จ)

  • config, admin ๋˜๋Š” local ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • system.* ์ปฌ๋ ‰์…˜์— ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • explain ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›๋˜๋Š” ์ž‘์—…์˜ ์ฟผ๋ฆฌ ๊ณ„ํš์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ ์ปค์„œ์˜ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ๋‚ด๋ถ€์—์„œ getMore์„(๋ฅผ) ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜์—์„œ ์ƒ์„ฑ๋œ ์ปค์„œ์˜ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์—์„œ getMore๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ช…๋ น์„ ํŠธ๋žœ์žญ์…˜ ์˜ killCursors ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ๋˜ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ killCursors ๋ช…๋ น์„ ์‹คํ–‰ ํ•˜๋ฉด ์„œ๋ฒ„ ๊ฐ€ ์ง€์ •๋œ ์ปค์„œ๋ฅผ ์ฆ‰์‹œ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์ด ์ปค๋ฐ‹ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์—์„œ ํ—ˆ์šฉ๋˜๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ
๋ช…๋ น
์ฐธ๊ณ 

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์€ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ์ฟผ๋ฆฌ์— $match ์ง‘๊ณ„ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  $sum ํ‘œํ˜„์‹์ด ์žˆ๋Š” $group ์ง‘๊ณ„ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋น„์ƒค๋“œํ˜• ์ปฌ๋ ‰์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

For sharded collections, use the aggregation pipeline with the $group stage. See Distinct Operation.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์—์„œ upsert: true ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ต์ฒด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉด ์ปฌ๋ ‰์…˜์ด ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ปฌ๋ ‰์…˜์ด ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ปฌ๋ ‰์…˜์ด ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ปฌ๋ ‰์…˜์ด ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ 

์ƒค๋“œ ํ‚ค ๊ฐ’ ์—…๋ฐ์ดํŠธ

ํŠธ๋žœ์žญ์…˜์—์„œ ๋˜๋Š” ์žฌ์‹œ๋„ ๊ฐ€๋Šฅ ์“ฐ๊ธฐ๋กœ ๋‹จ์ผ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ/์ฐพ๊ธฐ ๋ฐ ์ˆ˜์ •(update/findAndModify) ์ž‘์—…์„ ์‹คํ–‰ํ•ด ๋ฌธ์„œ์˜ ์ƒค๋“œ ํ‚ค ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ƒค๋“œ ํ‚ค ํ•„๋“œ๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ _id ํ•„๋“œ์ธ ๊ฒฝ์šฐ ์ œ์™ธ). ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์„œ์˜ ์ƒค๋“œ ํ‚ค ๊ฐ’ ๋ณ€๊ฒฝ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์นด์šดํŠธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด $count ์ง‘๊ณ„ ๋‹จ๊ณ„ ๋˜๋Š” $group($sum ํ‘œํ˜„์‹ ํฌํ•จ) ์ง‘๊ณ„ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

MongoDB ๋“œ๋ผ์ด๋ฒ„๋Š” $sum ํ‘œํ˜„์‹๊ณผ ํ•จ๊ป˜ $group๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์นด์šดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ—ฌํผ ๋ฉ”์„œ๋“œ๋กœ์„œ ์ปฌ๋ ‰์…˜ ์ˆ˜์ค€ API countDocuments(filter, options)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

mongosh๋Š” $sum ํ‘œํ˜„์‹๊ณผ ํ•จ๊ป˜ $group์„ ์‚ฌ์šฉํ•˜์—ฌ ์นด์šดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ—ฌํผ ๋ฉ”์„œ๋“œ db.collection.countDocuments()๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒค๋“œ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์˜ ๊ฒฝ์šฐ, db.collection.distinct() ๋ฉ”์„œ๋“œ/distinct ๋ช…๋ น๊ณผ $group ๋‹จ๊ณ„์˜ ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋ฆฌ

  • ์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜์˜ ๊ฒฝ์šฐ db.collection.distinct() ๋ฉ”์„œ๋“œ ๋˜๋Š” distinct ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์˜ ๊ณ ์œ  ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด ๋Œ€์‹  $group ๋‹จ๊ณ„์˜ ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

    • {00}} ๋Œ€์‹  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      db.coll.aggregate([
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])
    • {00}} ๋Œ€์‹  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      db.coll.aggregate([
      { $match: { status: "A" } },
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])

    ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ฌธ์„œ์— ์ปค์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    { "distinctValues" : [ 2, 3, 1 ] }

    ์ปค์„œ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฌธ์„œ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด ๊ต์ฐจ ์ƒค๋“œ ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜(write transaction)์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ปฌ๋ ‰์…˜๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น
๋ฉ”์„œ๋“œ
์ฐธ๊ณ  ์‚ฌํ•ญ

์ƒ์„ฑํ•  ์ธ๋ฑ์Šค๋Š” ์ปฌ๋ ‰์…˜์ด ์ž‘์—…์˜ ์ผ๋ถ€๋กœ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋˜๋Š” ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์ด์ „์— ์ƒ์„ฑ๋œ ๋นˆ ์‹ ๊ทœ ์ปฌ๋ ‰์…˜์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ปฌ๋ ‰์…˜์ด๋‚˜ ์ธ๋ฑ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์ด "local"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์—์„œ ์ปฌ๋ ‰์…˜ ๋ฐ ์ธ๋ฑ์Šค ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠธ๋žœ์žญ์…˜์—์„œ ์ปฌ๋ ‰์…˜ ๋ฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์“ฐ๊ธฐ ์ž‘์—…์„ ํ†ตํ•ด ์ปฌ๋ ‰์…˜์„ ์•”์‹œ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ ์‹คํ–‰
์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋ช…๋ น ์‹คํ–‰

upsert: true์ด ํฌํ•จ๋œ findAndModify

db.collection.updateOne() with upsert: true
db.collection.updateMany() with upsert: true
db.collection.replaceOne() with upsert: true

upsert: true์ด ํฌํ•จ๋œ update

db.collection.bulkWrite() with insert or upsert:true operations
Various Bulk Operation Methods with insert or upsert:true operations

ํŠธ๋žœ์žญ์…˜์—์„œ ํ—ˆ์šฉ๋˜๋Š” ๋‹ค๋ฅธ CRUD ์ž‘์—…์€ CRUD ์ž‘์—…์—์„œ ํ™•์ธํ•˜์„ธ์š”.

ํŠธ๋žœ์žญ์…˜์—์„œ ์ปฌ๋ ‰์…˜ ๋ฐ ์ธ๋ฑ์Šค ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠธ๋žœ์žญ์…˜์—์„œ ์ปฌ๋ ‰์…˜ ๋ฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

2} buildInfo,helloconnectionStatus , ๊ณผ ๊ฐ™์€ ์ •๋ณด ๋ช…๋ น(๋ฐ ๊ทธ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ) (๋ฐ ํ•ด๋‹น ํ—ฌํผ ๋ฉ”์„œ๋“œ)์™€ ๊ฐ™์€ ์ •๋ณด ๋ช…๋ น์€ ํŠธ๋žœ์žญ์…˜์—์„œ ํ—ˆ์šฉ๋˜์ง€๋งŒ, ํŠธ๋žœ์žญ์…˜์˜ ์ฒซ ๋ฒˆ์งธ ์—ฐ์‚ฐ์ด ๋  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์ค‘ ์ƒค๋“œ ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜์—์„œ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ์ƒค๋“œ์—์„œ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์— ์“ฐ๊ณ  ๋‹ค๋ฅธ ์ƒค๋“œ์— ์•”์‹œ์ ์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ MongoDB๋Š” ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋‘ ์ž‘์—…์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ปฌ๋ ‰์…˜์˜ ๋ช…์‹œ์  ์ƒ์„ฑ ์˜ˆ: db.createCollection() ๋ฉ”์„œ๋“œ ๋ฐ ์ธ๋ฑ์Šค ์˜ˆ: db.collection.createIndexes() ๋ฐ db.collection.createIndex() ๋ฉ”์„œ๋“œ("local"์ด์™ธ์˜ ์ฝ๊ธฐ ๋ฌธ์ œ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ).

  • listCollections 2} ๋ฐ ๋ช…๋ น๊ณผ ํ•ด๋‹น ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ.listIndexes

  • createUser, getParameter, count ๋“ฑ๊ณผ ํ•ด๋‹น ํ—ฌํผ์™€ ๊ฐ™์€ ๊ธฐํƒ€ ๋น„ CRUD ๋ฐ ๋น„ ์ •๋ณด ์ž‘์—…์ž…๋‹ˆ๋‹ค.

  • ๋ณ‘๋ ฌ ์ž‘์—…. ์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— updateํ•˜๋ ค๋ฉด bulkWrite ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.