Docs Menu
Docs Home
/ /
Cursors

cursor.count()

cursor.count()

์ค‘์š”

Mongo์‰ฌ ๋ฐฉ๋ฒ•

์ด๋Š” mongosh ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Node.js ๋˜๋Š” ๊ธฐํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณ„ ๋“œ๋ผ์ด๋ฒ„ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค .

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ mongosh ๋ฉ”์„œ๋“œ๋Š” ๋ ˆ๊ฑฐ์‹œ mongo shell ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋ ˆ๊ฑฐ์‹œ ๋ฉ”์„œ๋“œ๋Š” mongosh ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ mongo ์…ธ ๋ฌธ์„œ๋Š” ํ•ด๋‹น MongoDB ์„œ๋ฒ„ ๋ฆด๋ฆฌ์Šค ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

MongoDB API ๋“œ๋ผ์ด๋ฒ„์˜ ๊ฒฝ์šฐ ์–ธ์–ด๋ณ„ MongoDB ๋“œ๋ผ์ด๋ฒ„ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ 

4.0 ๊ธฐ๋Šฅ๊ณผ ํ˜ธํ™˜๋˜๋Š” MongoDB ๋“œ๋ผ์ด๋ฒ„๋Š” countDocuments() ๋ฐ estimatedDocumentCount()์— ํ•ด๋‹นํ•˜๋Š” ์ƒˆ๋กœ์šด API๋ฅผ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ์ปค์„œ ๋ฐ ์ปฌ๋ ‰์…˜ count() API๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋“œ๋ผ์ด๋ฒ„์˜ ๊ตฌ์ฒด์ ์ธ API ์ด๋ฆ„์€ ๋“œ๋ผ์ด๋ฒ„ API ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปค์„œ ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์„œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. count() ๋ฉ”์„œ๋“œ๋ฅผ find() ์ฟผ๋ฆฌ ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ฟผ๋ฆฌ ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์ฟผ๋ฆฌ ์—์„œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

  • ์ž‘์—…์ด ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž ์—†์ด ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด๋Š” ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž๊ฐ€ ์—†์œผ๋ฉด ์ด๋Ÿฌํ•œ ๊ฐ€ ์ปฌ๋ ‰์…˜์˜ count() ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋Œ€๋žต์ ์ธ ๊ฐœ์ˆ˜๊ฐ€ find() count() ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ,

    • ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์•„ ๋ฌธ์„œ๋ฅผ ์ œ๋Œ€๋กœ ํ•„ํ„ฐ๋งํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

    • ๋น„์ •์ƒ ์ข…๋ฃŒ ํ›„์—๋Š” ๊ฐœ์ˆ˜๊ฐ€ ๋ถ€์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ปฌ๋ ‰์…˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์นด์šดํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์นด์šดํŠธ ์˜ต์…˜์ด ์žˆ๋Š” collStats ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

count() ๋ฉ”์„œ๋“œ์˜ ํ”„๋กœํ† ํƒ€์ž… ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

db.collection.find(<query>).count()

count() ๋ฉ”์„œ๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Parameter
์œ ํ˜•
์„ค๋ช…

applySkipLimit

๋ถ€์šธ

์„ ํƒ ์‚ฌํ•ญ. ์นด์šดํŠธ์—์„œ ๋ฐ cursor.skip() cursor.limit() ๋ฉ”์„œ๋“œ์˜ ํšจ๊ณผ๋ฅผ ๊ณ ๋ คํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. count() ๊ธฐ๋ณธ๊ฐ’ ์œผ๋กœ cursor.skip() cursor.limit() ๋ฉ”์„œ๋“œ๋Š” ๋ฐ ์˜ ํšจ๊ณผ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ์˜ ํšจ๊ณผ๋ฅผ ๊ณ ๋ คํ•˜๋ ค๋ฉด applySkipLimit ๋ฅผ true ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ MongoDB๋Š” db.collection.find(<query>).count() ๊ตฌ์„ฑ์˜ ๋Œ€์•ˆ์œผ๋กœ ๋™๋“ฑํ•œ db.collection.count()๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

MongoDB๋Š” hint() ๋ฐ count() ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ธ๋ฑ์Šค ์ง€์ •์—์„œ ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํŒ

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • MongoDB Atlas: ํด๋ผ์šฐ๋“œ์—์„œ์˜ MongoDB ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค

์ฐธ๊ณ 

์ด ๋ช…๋ น์€ ๋ชจ๋“  MongoDB Atlas ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•œ Atlas ์ง€์›์— ๊ด€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • MongoDB Enterprise: MongoDB์˜ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

  • MongoDB Community: MongoDB์˜ ์†Œ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌด๋ฃŒ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” count์™€ shell ํ—ฌํผ count() ๋ฐ db.collection.count() ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์นด์šดํŠธ ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ find์— ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž๊ฐ€ ์—†๋Š” count()๋Š” ๊ณ ์•„ ๋ฌธ์„œ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ฒญํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ง„ํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ๊ฐœ์ˆ˜๊ฐ€ ๋ถ€์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด db.collection.aggregate() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

$count ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ž‘์—…์—์„œ๋Š” collection์˜ ๋ฌธ์„œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

db.collection.aggregate( [
{ $count: "myCount" }
])

$count ๋‹จ๊ณ„๋Š” ๋‹ค์Œ $group + $project ์‹œํ€€์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

db.collection.aggregate( [
{ $group: { _id: null, count: { $sum: 1 } } }
{ $project: { _id: 0 } }
] )

ํŒ

$collStats ๋Š” collection์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€๋žต์ ์ธ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” collection์„ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

{ a: 1, b: 1 }

๊ฐœ์ˆ˜๋ฅผ ์…€ ๋•Œ MongoDB๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ์ฟผ๋ฆฌ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ ,

  • ์ฟผ๋ฆฌ์—๋Š” ์ธ๋ฑ์Šค์˜ ํ‚ค์— ๋Œ€ํ•œ ์กฐ๊ฑด๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ 

  • ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž๊ฐ€ ์—ฐ์†๋œ ๋‹จ์ผ ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค ํ‚ค์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ž‘์—…์€ ์ธ๋ฑ์Šค๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

db.collection.find( { a: 5, b: 5 } ).count()
db.collection.find( { a: { $gt: 5 } } ).count()
db.collection.find( { a: 5, b: { $gt: 10 } } ).count()

๊ทธ๋Ÿฌ๋‚˜ ์ฟผ๋ฆฌ๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ž๊ฐ€ ๋‹จ์ผ ์—ฐ์† ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค ํ‚ค์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฟผ๋ฆฌ์— ์ธ๋ฑ์Šค ์™ธ๋ถ€ ํ•„๋“œ์— ๋Œ€ํ•œ ์กฐ๊ฑด๋„ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ MongoDB๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด์•ผ๋งŒ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count()
db.collection.find( { a: { $gt: 5 }, b: 5 } ).count()
db.collection.find( { a: 5, b: 5, c: 5 } ).count()

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ ์ฝ๋Š” ๋™์•ˆ MongoDB๋Š” ๋™์ผํ•œ ๊ฐœ์ˆ˜ ์ž‘์—…์˜ ํ›„์† ํ˜ธ์ถœ์ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๊ฐ–๋„๋ก ๋ฌธ์„œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ํŽ˜์ด์ง•ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ count() ๋ฉ”์„œ๋“œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์—ฐ์‚ฐ์€ orders ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

db.orders.find().count()

๋‹ค์Œ ์ž‘์—…์€ new Date('01/01/2012')๋ณด๋‹ค ํฐ ord_dt ํ•„๋“œ๊ฐ€ ์žˆ๋Š” orders collection์˜ ๋ฌธ์„œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()

๋‹ค์Œ ์—ฐ์‚ฐ์—์„œ๋Š” limit(5)์ด(๊ฐ€) ์ ์šฉ๋˜์—ˆ์œผ๋ฉฐ new Date('01/01/2012')๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ord_dt ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ orders ์ปฌ๋ ‰์…˜ ๋‚ด ๋ฌธ์„œ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)

๋‹ค์Œ ์ž‘์—…์—์„œ๋Š” ์ธ๋ฑ์Šค ํ‚ค ์‚ฌ์–‘์ด { status: 1 }์ธ "status_1" ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ord_dt ํ•„๋“œ๊ฐ€ new Date('01/01/2012')๋ณด๋‹ค ํฌ๊ณ  status ํ•„๋“œ๊ฐ€ "D"์ธ orders collection์— ์žˆ๋Š” ๋ฌธ์„œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

db.orders.find(
{ ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
).hint( "status_1" ).count()

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

์ปค์„œ.comment

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