์ ์
cursor.count()์ค์
Mongo์ฌ ๋ฐฉ๋ฒ
์ด๋
mongosh๋ฉ์๋์ ๋๋ค. ์ด๋Node.js๋๋ ๊ธฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณ ๋๋ผ์ด๋ฒ ๋ฉ์๋์ ๋ํ ์ค๋ช ์๊ฐ ์๋๋๋ค .๋๋ถ๋ถ์ ๊ฒฝ์ฐ
mongosh๋ฉ์๋๋ ๋ ๊ฑฐ์mongoshell ๋ฉ์๋์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ๋ ๊ฑฐ์ ๋ฉ์๋๋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()