SQL์ด ๋์ค๊ณ ๋์ ๋ฐ์ดํฐ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ๋ฉด์ ๋ฐ์ํ๋ SQL ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด NoSQL์ด ํ์ํ์ต๋๋ค. NoSQL ์ข ๋ฅ๋ ์๋์ ๊ฐ์ต๋๋ค.
- key-value stores: Redis, Amazon Dynamo DB
- column stores: HBase, Cassandra
- document stores: Mongo DB, Couchbase
- graph databases: Neo4J
- search engines: Solr, ElasticSearch, Splunk
MongoDB๋ ๋ํ์ ์ธ NoSQL ๋ํ๋จผํธ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋๋ค. ๋ํ๋จผํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ด ์๋, ๋ฌธ์์ฒ๋ผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. JSON๊ณผ ์ ์ฌํ ํ์์ ๊ฐ์ง๊ณ ์์ด ๋ฐ์ดํฐ๋ฅผ ํ๋-๊ฐ์ ํํ๋ก ๊ฐ์ง๊ณ ์๊ณ , ์ปฌ๋ ์ ์ด๋ผ๊ณ ํ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํฉ๋๋ค.
NoSQL ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฌ์ฉ ์ผ์ด์ค
์ด์ ์ ๋ฐฐ์ ๋ ๊ฒ์ฒ๋ผ NoSQL์ ๋น๊ตฌ์กฐ์ /๋น๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋งํฉ๋๋ค. ์ด๋ฌํ ํํ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋น๊ตฌ์กฐ์ ์ธ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
- ํด๋ผ์ฐ๋ ์ปดํจํ ๋ฐ ์ ์ฅ๊ณต๊ฐ์ ์ต๋ํ ํ์ฉํ๋ ๊ฒฝ์ฐ: ์์ง์ ํ์ฅ์ผ๋ก DB๋ฅผ ์ฆ์คํ๋ SQL๊ณผ ๋ฌ๋ฆฌ ์ํ์ ํ์ฅ์ ํํ๋ก ์ฆ์คํ๋ฏ๋ก, ์ด๋ก ์ ๋ฌดํ๋๋ก ์๋ฒ๋ฅผ ๊ณ์ ๋ถ์ฐ์์ผ DB๋ฅผ ์ฆ์คํ ์ ์์ต๋๋ค.
- ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๊ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ
- MongoDB์ ๊ฒฝ์ฐ, ํ๋์ Primary์ ๋ ๊ฐ์ Secondary๋ก ์ด๋ฃจ์ด์ง ๋ ํ๋ฆฌ์นด ์ธํธ๊ฐ ์์ต๋๋ค. ์ด ๋๋ถ์ ํ๋์ ์๋ฒ์์ fault๊ฐ ๋์ด๋ ์ฌ์ฉ์๋ค์ด ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. (๊ณ ๊ฐ์ฉ์ฑ)
์ฉ์ด ์ ๋ฆฌ
์๋ก์ด ์ฉ์ด๋ค์ด ๋ง์ด ๋์ ์ ๋ฆฌํ์ต๋๋ค.
- ๋ ํ๋ฆฌ์นด ์ธํธ
๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ช ๊ฐ์ ์ฐ๊ฒฐ๋ MongoDB ์ธ์คํด์ค์ ๋ชจ์์ ๋๋ค. - ์ธ์คํด์ค
ํน์ ์ํํธ์จ์ด๋ฅผ ์คํํ๋ ๋ก์ปฌ ๋๋ ํด๋ผ์ฐ๋ ๋จ์ผ ๋จธ์ ์ผ๋ก, ํด๋ผ์ฐ๋์์ ์คํ๋๋ MongoDB ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด์ ํด๋นํฉ๋๋ค. - ํด๋ฌ์คํฐ
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฒ ๊ทธ๋ฃน์ผ๋ก ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐํ์ฌ ํ๋์ ๋จ์ผ ์ปดํจํฐ์ฒ๋ผ ๋์ํ๋๋ก ์ ์ํ ์ปดํจํฐ๋ฅผ ๋งํฉ๋๋ค. - ๋ํ๋จผํธ / ํ๋ / ๊ฐ
ํ๋-๊ฐ ์์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ / ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์ํ ๊ณ ์ ํ ์๋ณ์ / ์ฃผ์ด์ง ์๋ณ์์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ - ์ปฌ๋ ์
MongoDB์ ๋ํ๋จผํธ๋ก ๊ตฌ์ฑ๋ ์ ์ฅ์์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ํ๋จผํธ ๊ฐ์ ๊ณตํต ํ๋๊ฐ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น ๋ง์ ์ปฌ๋ ์ ์ด ์๊ณ , ์ปฌ๋ ์ ๋น ๋ง์ ๋ํ๋จผํธ๊ฐ ์์ ์ ์์ต๋๋ค.
BSON
BSON์ Binary JSON์ ์ฝ์๋ก ์ด์ง๋ฒ์ ๊ธฐ๋ฐ์ ๋ ํํ๋ฒ์ ๋๋ค. JSON์ ํ๊ณ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋์์ต๋๋ค.
JSON์ ํ๊ณ๋ก๋ ํ ์คํธ ํ์์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ์ฝ์ง๋ง, ํ์ฑ์ด ๋๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋นํจ์จ์ ์ ๋๋ค.
๋ํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ๋ง์ ์ง์ํ๊ธฐ ๋๋ฌธ์, ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ํ์ ์ ์ ์ฝ์ด ์์ต๋๋ค.
BSON์ ์์ ๋งํ๋ ๊ฒ์ฒ๋ผ ์ด์ง๋ฒ์ ๊ธฐ๋ฐ์ ๋์๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ํจ์จ์ ์ด๋ฉฐ, ๋ ๋ง์ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ BSON๊ณผ JSON์ ํน์ง์ ์ด๋ ค MongoDB์ ๋ฐ์ดํฐ๋ BSON์ ํํ๋ก ์ ์ฅ๋๊ณ , ๋ณดํต ์ฝ๊ธฐ ์ฌ์ด JSON์ ํํ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
Exporting & Importing
| JSON | BSON |
| mongoexport | mongorestore |
| mongoimport | mogodump |
<export>
mongodump --uri "mongodb+srv://<your username>:<your password>@<your cluster>.mongodb.net/database_name">
"<Atlas Cluster URI>"
mongoexport --uri "<Atlas Cluster URI>"
--collection=<collection name>
--out=<filename>.json
// ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ผ ๋๋ ๋ด๋ณด๋ผ ์ปฌ๋ ์
๊ณผ ํ์ผ์ ์ด๋ฆ์ ์ ํํ ๋ช
์ํด์ผ ํฉ๋๋ค.
<import>
mongostore --uri "<Atlas Cluster URI>"
--drop dump
mongoimport --uri "<Atlas Cluster URI>"
--drop=<filename>.json
CRUD
์์ด ๋ง์ ์ฃผ์ ๋ฌธ๋ฒ ์์ฃผ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค!
Create
db.inspections.insert([{ "id" : "1", "test" : "1" }, { "id" : "1", "test" : "2" }, { "id" : "3", "test" : "3" }], { "ordered": false })
// The first object and third object will be inserted due to "ordered" that ignores orders.
์์๋๋ก ์ ๋ ฅ๋๋ ํน์ง ๋๋ฌธ์ ๋ํ๋จผํธ ๊ฐ ์ถฉ๋์ด ์์ ๊ฒฝ์ฐ ํด๋น ๋ํ๋จผํธ ์ดํ ์์์ ์ ์์ ์ธ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ง ์์ต๋๋ค. ์ด๋ฌํ ํน์ง์ด ์ ์ฉ๋์ง ์๋๋ก ํ๊ธฐ ์ํด์๋ "ordered" ํน์ฑ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
Read
show dbs
use DB๋ช
ex) use sample_training
show collections
ํด๋น DB ์์ ์๋ ์ปฌ๋ ์ ๋ค์ด ๋ชจ๋ ๋ณด์ฌ์ง๋๋ค.
db.collection_name.find(<์ฟผ๋ฆฌ๋ฌธ>)
ex) db.zips.find({"state":"NY"})
find๋ฅผ ํตํด ์กฐํ๋๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์๊ฐ 20๊ฐ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ๋๋ค ํ๊ฒ ์ ํ๋ ์ด 20๊ฐ ๊ฒฐ๊ณผ๋ฌผ๋ง ์ถ๋ ฅ๋ฉ๋๋ค. ํด๋น ์กฐ๊ฑด์ ๋ง๋ ๋ค์ 20๊ฐ์ ๋ํ๋จผํธ๋ฅผ ์กฐํํ๊ธฐ ์ํด์๋ iterate์ ์ค์๋ง์ด it ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ ๊ฐ์ง ์กฐ๊ฑด์ ์ฃผ๊ณ ์ถ๋ค๋ฉด, find(<์ฟผ๋ฆฌ๋ฌธ 1, ์ฟผ๋ฆฌ๋ฌธ 2>)์ ํํ๋ก ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์ถ๋ค๋ฉด ์กฐ๊ฑด ์ฟผ๋ฆฌ๋ฌธ ์์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ex) db.zips.find
pretty( )๋ ๋ํ๋จผํธ์ ๊ตฌ์กฐ์ ๊ฐ ํ๋, ๊ฐ์ ์์ ์กฐ๊ธ ๋ ์ฝ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค. ex) db.zips.find( ).pretty( )
count( )๋ ๋ฐ์ดํฐ์ ์๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ex) db.zips.find( ).count( )
findOne( )์ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํฉ๋๋ค. ex) db.zips.findOne({" ")})
Update
update๋ ์ฃผ์ด์ง ์ฟผ๋ฆฌ๋ฌธ์ ๋ง๋ ์ฒซ ๋ฒ์งธ ๋ํ๋จผํธ ํ๋๋ง ์ ๋ฐ์ดํธํ๋ updateOne( ), ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๋ํ๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ updateMany( ) 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
๋ง์ฝ ์ฐํธ๋ฒํธ๋ก ๊ตฌ๋ถ๋ ALPINE ์์ ์ง์ญ ์ธ๊ตฌ์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
db.zips.updateMany({ "city" : "ALPINE" }, { "$inc" : { "pop" : 10 } } )
updateMany์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ์ด๋ค ๋ํ๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ ์ง ๊ฒฝ์ ํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํฉ๋๋ค.
๋ ๋ฒ์งธ ์ธ์์๋ ๋ฐ์ํ ์ ๋ฐ์ดํธ ๋ด์ฉ์ ํน์ ํฉ๋๋ค. ์ฌ๊ธฐ์ $inc๋ฅผ ์ฌ์ฉํ๋ฉด, ํน์ ํ๋์ ๊ฐ์ ์ํ๋ ๋งํผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์ฒซ ๋ฒ์งธ ์ธ์์ธ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ํ๋จผํธ์ ์๋ฅผ ๋ํ๋ด๋ matchedCount์, ๋ ๋ฒ์งธ ์ธ์๋ก ๋ค์ด๊ฐ ์ ๋ฐ์ดํธ ์ฐ์ฐ์๋ก ์ธํด ์์ ๋ ๋ํ๋จผํธ์ ์๋ฅผ ๋ํ๋ด๋ modiefiedCount๋ก ๋๋์ด์ ธ ์๋ต์ด ์ต๋๋ค.
๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ค ํ๋ค๋ฉด $inc๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๊ฒ ์ง๋ง, 100,000,000์์ 5,325,678๋ก ์ค์ด๋ ค๊ณ ํ๋ค๋ฉด ์ผ์ผ์ด ๊ณ์ฐํ๊ธฐ ๋ณต์กํ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ $set์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
db.zips.updateOne({ "zip" : "12534" }, { "$set" : {"pop" : 6235} } )
$push ์ฐ์ฐ์๋ ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ง ํ๋์ ๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ์ฐ์ฐ์์ ๋๋ค. ์๋์ ๊ฐ์ด ์๋ธ ๋ํ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
db.grades.updateOne({ "student_id" : 250, "class_id" : 339 }, { "$push" : { "scores" : { "type" : "extra credit", "score" : 100 } } } )
Delete
delete์๋ ํ๋์ ๋ํ๋จผํธ๋ฅผ ์ง์ธ ์ ์๋ deleteOne( )๊ณผ ์ฌ๋ฌ ๋ํ๋จผํธ๋ฅผ ์ญ์ ํ ์ ์๋ deleteMany( )๊ฐ ์์ต๋๋ค.
๋ํ๋จผํธ๊ฐ ์๋ ์ปฌ๋ ์ ์ ์ญ์ ํ๊ธฐ ์ํด์๋ drop์ ์ฌ์ฉํฉ๋๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์ ์ญ์ ํ ์ ์์ต๋๋ค.
db.collection_name.drop( )
Advanced
๋น๊ต ์ฐ์ฐ์
$eq (equal to)
$ne (not equal to)
$gt (greater than)
$lt (less than)
$gte (greater than or equal to)
$lte (less than or equal to)
{ <feld> : { <operator> : <value> } }
ex) db.trips.find ( { "tripduration" : {"$lte" : 70}, "usertype" : "Customer" } )
usertype์ด Customer์ธ ์๋ฃ๋ฅผ ๊ตฌํ๋ ค๊ณ ํ ๋ $eq๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ $eq๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค.
๋ ผ๋ฆฌ ์ฐ์ฐ์
$and $eq์ฒ๋ผ ์๋ต ๊ฐ๋ฅ
$or
$nor ์ฃผ์ด์ง ๋ชจ๋ ์ฟผ๋ฆฌ์ ๊ณผ ์ผ์นํ์ง ์๋๊ฐ
$not ์ฃผ์ด์ง ์ฟผ๋ฆฌ์ ์ผ์นํ์ง ์๋๊ฐ
$and, $or ๋ฐ $nor๋ ์ ์ฌํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉฐ ์ฐ์ฐ์๊ฐ ์๋ํ ์ ์ ๋ฐฐ์ด ์์ ์์นํฉ๋๋ค.
$not์ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋จ์ํ ๋ค์ ์ค๋ ์กฐ๊ฑด์ ๋ถ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ๊ตฌ๋ฌธ์ด ํ์ํ์ง ์์ต๋๋ค.
ํํ ์ฐ์ฐ์
ํํ ์ฐ์ฐ์($expr)๋ฅผ ํฌ๊ฒ ์ธ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ๋ก ์ฟผ๋ฆฌ ๋ด์์ ์ง๊ณ ํํ์(Aggregation Expression)์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ { $expr : { expression } } ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
๋ ๋ฒ์งธ๋ก $expr๋ฅผ ์ด์ฉํด ๋ณ์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก $expr๋ฅผ ์ด์ฉํด ๊ฐ์ ๋ํ๋จผํธ ๋ด์ ํ๋๋ค์ ์๋ก ๋น๊ตํ ์ ์์ต๋๋ค.
๊ฐ์ ๋ํ๋จผํธ ๋ด์ ํ๋๋ค์ ๋น๊ตํ๊ณ ์ถ์ ๋ ์๋์ ๊ฐ์ด ์ธ ์ ์์ต๋๋ค.
{ "$expr" : { "$eq" : [ "$start station id", "$end station id" ] } }
start station id์ end station id์ ๊ฐ์ด ๋์ผํ์ง๋ฅผ ํ์ธํด์ฃผ๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋๋ค.
์ด๋ $์ ์ฌ์ฉํจ์ผ๋ก์จ ํด๋น ํ๋์ ๊ฐ์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ start station id์ ๊ฐ์ด 439๋ผ๋ฉด $start station id๋ฅผ ํตํด 439๋ผ๋ ๊ฐ์ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
๋ฐฐ์ด ์ฐ์ฐ์
$push ๋ฐฐ์ด ์ฐ์ฐ์๋ ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ด์ ์ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ด์๋ ๊ฒฝ์ฐ ํด๋น ํ๋๋ฅผ ๋ฐฐ์ด ํ์ ์ ํ๋๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
$size ๋ฐฐ์ด ์ฐ์ฐ์๋ ์ง์ ๋ ๋ฐฐ์ด ํ๋๊ฐ ์ฃผ์ด์ง ๊ธธ์ด์ ์ ํํ ์ผ์นํ๋ ๋ชจ๋ ๋ํ๋จผํธ๋ค์ด ์๋ ์ปค์๋ฅผ ๋ฐํํฉ๋๋ค.
$all ๋ฐฐ์ด ์ฐ์ฐ์๋ ์ง์ ๋ ๋ฐฐ์ด ํ๋์ ๋ฐฐ์ด ์์์ ๊ด๊ณ์์ด ์ง์ ๋ ๋ชจ๋ ์์๊ฐ ํฌํจ๋ ๋ชจ๋ ๋ํ๋จผํธ๋ค์ด ์๋ ์ปค์๋ฅผ ๋ฐํํฉ๋๋ค.
Aggregation Framework
Aggregation Framework๋ MongoDB์์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌ ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
aggregate๋ฅผ ์ฌ์ฉํ๋ฉด ๋ํ๋จผํธ๋ฅผ ํํฐ๋งํ์ง ์๊ณ ๊ทธ๋ฃน์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ํ ํ์ดํ๋ผ์ธ์ฒ๋ผ ๋ฐฐ์ด ์์์ ์์๋๋ก ์์ ์ ํฉ๋๋ค.
$group์ ๋ค์ด์จ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฌ๋ฌ ๊ฐ๋ก ๊ทธ๋ฃนํํ๋ ์ฐ์ฐ์์ ๋๋ค.
๋ง์ฝ listingAndReviews ์ปฌ๋ ์ ์์ ๊ตญ๊ฐ ์ด๋ฆ๊ณผ ๊ทธ ์์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ฉด
db.listingsAndReviews.aggregate( [ { $project : { "address" : 1, "_id" : 0 } }, { $group : { _id : "$address.country", "count" : { "$sum" : 1 } } } ] )
์์ ๊ฐ์ด ์ธ ์ ์์ต๋๋ค. $group ์ฐ์ฐ์๋ฅผ ์ด์ฉํด address.country ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค. ๋ ๋ฒ์งธ ์ธ์์์๋ $group์์ $sum ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๊ตญ๊ฐ๋ง๋ค ๋ช ๊ฐ์ ์์๊ฐ ์๋์ง ์ง๊ณํ ์ ์์ต๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| TIL 56 - 2: [์ธ์ฆ/๋ณด์] ๊ธฐ์ด (0) | 2021.10.22 |
|---|---|
| TIL 56 - 1: [์ธ์ฆ/๋ณด์] ๊ธฐ์ด (0) | 2021.10.21 |
| TIL 54: [๋ฐ์ดํฐ๋ฒ ์ด์ค] MVC (0) | 2021.10.18 |
| TIL 53: [๋ฐ์ดํฐ๋ฒ ์ด์ค] MVC (0) | 2021.10.17 |
| TIL 52: [๋ฐ์ดํฐ๋ฒ ์ด์ค] MVC (0) | 2021.10.15 |