
โ Create Document
show dbs
admin 40.00 KiB
config 72.00 KiB
local 40.00 KiB
use movies
switched to db movies
db.createCollection("movies")
{ ok: 1 }
db.movies.insertOne({})
{
acknowledged: true,
insertedId: ObjectId('69d466bc1fef767903389270')
}
db.movies.insertOne({
title: "The Godfather",
year: 1999,
director: {
name: "F.F.C",
alive: true
},
genres: ["Crime", "Drama", "Pizza"]
})
{
acknowledged: true,
insertedId: ObjectId('69d4674a1fef767903389271')
}
movies
โ Read Document
์ ์ฒด ๋ฐ์ดํฐ ์ฝ๊ธฐ
db.movies.find()
ํน์ ํ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ ์ฝ๊ธฐ
db.movies.find({
director: "Christopher Nolan"
})
๊ฐ๋ ์ด๋ฆ
$gte
db.movies.find({
rating: {$gte: 8}
})
ํ์ 8์ ์ด์(greater than or equal)
$gt, $lt
db.movies.find({
year: {$gt: 2000, $lt: 2010}
})
2000๋ ์ด๊ณผ 2010๋ ๋ฏธ๋ง (AND ์ฐ์ฐ)
$or
db.movies.find({
$or: [{
rating: {$gt: 9}
}, {year: {$gte: 2020}}]
})
OR ์ฐ์ฐ
$in
db.movies.find({
genres: {$in : ["Drama", "Crime"]}
})
ํฌํจ ์ฌ๋ถ(ํ๋๋ง ๋ค์ด์์ด๋ ๋จ)
$all
db.movies.find({
genres: {$all: ["Drama", "Crime"]}
})
๋ชจ๋ ํฌํจ๋์ด์ผ ํจ
$regex
db.movies.find({
title: {$regex: /the/i}
})
the๊ฐ title์ ํฌํจ๋์ด์ผ ํจ
$size
db.movies.find({
genres: {$size: 3}
})
genres ๋ฐฐ์ด์ length๊ฐ 3์ด์ด์ผ ํจ
$exists
db.movies.find({
director: {$exists: false}
})
director๋ผ๋ key๊ฐ ์์ด์ผ ํจ
Keanu Reeves๊ฐ ์ฒซ ๋ฒ์งธ cast์ธ ์ํ ์ฐพ๊ธฐ
db.movies.find({
"cast.0": "Keanu Reeves"
})
"cast.0" -> cast์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ผ๋ ๋ป
์ค์ฒฉ๋ ๋ฌธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ ์ฐพ๊ธฐ
db.movies.find({
"director.alive": true
})
"director.alive" -> ์ค์ฒฉ๋ ๋ฌธ์์ธ director์ alive ์์ฑ
sort, limit, skip
db.movies.find().sort({rating: -1, title: 1}).limit(10).skip(10)
rating์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , 10๊ฐ๋ฅผ ๊ฑด๋๋ฐ๊ณ 10๊ฐ๋ง ๊ฐ์ ธ์จ๋ค
๋์ rating์ด ๊ฐ๋ค๋ฉด ๋ค์ ์ ๋ ฌ ์์ title์ด๊ณ ์ํ๋ฒณ ์์ด๋ค.
https://www.mongodb.com/ko-kr/docs/manual/reference/mql/query-predicates/#std-label-query-selectors
์ฟผ๋ฆฌ ์กฐ๊ฑด์ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งค๋ด์ผ - MongoDB Docs
์ฟผ๋ฆฌ ์กฐ๊ฑด์๋ ๋ฌธ์ ์ง์ ๋ ์ฟผ๋ฆฌ ์ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ์ ๋ฐํํ๋ ํํ์์ ๋๋ค. ์์ ๋ฅผ ๋ค์ด { name: { $eq: "Alice" } } ์ "name" ํ๋ ๊ฐ์ด ๋ฌธ์์ด "Alice"์ธ ๋ฌธ์๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ ์กฐ
www.mongodb.com
โ Update Document
updateOne
db.movies.updateOne({
_id: ObjectId('69d4747cb86061dc24c503b5')
}, {
$set: {
'director.name': "Francing Ford Coppola"
},
$currentDate: {
updated_at: true
}
})
findOneAndUpdate
db.movies.findOneAndUpdate({
_id: ObjectId('69d4747cb86061dc24c503b5')
}, {
$set: {
'director.name': "Francing Ford Coppola"
},
$currentDate: {
updated_at: true
}
}, {
returnNewDocument: true,
upsert: true
})
updateOneํ๊ณ ๋น์ทํ ์์ ์ ์ํํ๋, findOneAndUpdate๋ ์ฌ๋ฌ ๋ค๋ฅธ ์ค์ ๋ค์ ์ค ์ ์๋ค.
returnNewDocument๋ ์๋ก ์์ฑ๋ document๋ฅผ return, upsert๋ ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉด update, ์กด์ฌํ์ง ์์ผ๋ฉด insertํ๋ค.
$inc
db.movies.updateMany({
director: "Christopher Nolan"
}, {
$inc: {rating: 0.2}
})
rating์ 0.2์ฉ ์ฆ๊ฐ ์ํด(increment)
$push
db.movies.updateMany({
title: "Inception"
},{
$push: {genres: "Mind-Control"}
})
genres ๋ฐฐ์ด์ "Mind-Control" ์ถ๊ฐ
$pull
db.movies.updateMany({
title: "Inception"
},{
$pull: {genres: "Mind-Control"}
})
$addToSet
db.movies.updateMany({
title: "The Dark Knight"
}, {
$addToSet: {cast: "Michael Cane"}
})
$push์ ๊ฐ์ง๋ง ์ด๋ฏธ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ๋ค์ด๊ฐ์ง ์๋๋ค.
$rename
db.movies.updateMany({}, {
$rename: {runtime: "duration"}
})
schema ์์ฑ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ
Embedded Document์ ๋ํด์๋ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
db.movies.updateOne({
title: "Inception"
}, {
$set: {
boxOffice: {
domestic: 123412341234,
international: 1231412412,
worldwideTotal: 2342349893423
}
}
})
$unset
db.movies.updateMany({}, {
$unset: {plot: ""}
})
plot ์์ฑ ์ญ์
$expr, $each
db.movies.updateMany({
$expr: {$lt: [{$size: "$genres"}, 3]}
}, {
$addToSet: {genres: {$each: ["Other", "Happy"]}}
})
$expr์ ๋ ๋ณต์กํ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
$each๋ ๋ฐฐ์ด ์์ฒด๋ฅผ ๋ฃ๋ ๊ฒ์ด ์๋ ๋ฐฐ์ด์ ์์ ๊ฐ๊ฐ์ ๋ฃ๊ฒ ํด์ค๋ค.
$lt๋ฅผ ์ ๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์ฒซ ๋ฒ์งธ ๊ฐ์ด ๋ ๋ฒ์งธ ๊ฐ๋ณด๋ค ์์ ๋ true๋ฅผ ๋ฐํํ๋ค.
โ Delete Document
Update์ ์ฐ์ฐ์๋ค์ ๋ค ๋น์ทํ๋ฉฐ, deleteMany์ deleteOne์ด ์๋ค.
โ Aggregate Document
GROUP BY ์ ๊ณผ ์ ์ฌํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ์์ ์ ์ํํ๋ค.
SQL์์ GROUP BY ์ ๊ณผ ์ฌ๋ฌ ์ง๊ณํจ์๋ค์ ํตํด์ ํ๋ ์ผ๋ค์ MongoDB์์๋ aggregate๋ผ๋ ํจ์๋ฅผ ํตํด์ ํ ์ ์๋ค.
$count
db.movies.aggregate([
{$count: "total_movies"}
])
๋ชจ๋ ์ํ์ ๊ฐ์๋ฅผ ์ธ๊ณ , ํด๋น ๋ฐ์ดํฐ์ key ์ด๋ฆ์ "total_movies"๋ก ์ง์
$group
db.movies.aggregate([
{$group: {_id: null, avgRating: {$avg: "$rating"}}}
])
group key๋ฅผ ์ง์ ํด์ group ์ํฌ ์๋ ์๋ค.
(์ด ์ฝ๋์์๋ _id ๊ฐ์ null์ ์ฃผ์ด์ ๋ชจ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋๋ค.)
$unwind
db.movies.aggregate([
{$unwind: "$genres"}
])
PostgreSQL์ unnest ํจ์๋ ๋น์ทํ๋ค.
genres ๋ฐฐ์ด์ ํ์ด์ ์์๋ณ๋ก ๋ถ๋ฆฌํด ํ ์ํ๋ฅผ genres๋ณ๋ก ๋๋์ด์ ์ฌ๋ฌ ๊ฐ์ document๋ก ๋ง๋ ๋ค.
db.movies.aggregate([
{$unwind: "$genres"},
{$group: {_id: "$genres", count: {$sum: 1}}},
{$sort: {count: -1}}
])
genres๋ฅผ ๊ธฐ์ค์ผ๋ก group์ํค๊ณ , ๊ฐ document๋ง๋ค 1์ฉ ๋ํด๋ผ.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ์ง๊ณ๋ count๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํ๋ค.
$min, $max
db.movies.aggregate([
{$group: {_id: null, oldestMovie: {$min: "$year"}, newestMovie: {$max: "$year"}, count: {$sum: 1}}},
])
$avg, $sort
db.movies.aggregate([
{$group: {_id: "$year", avgDuration: {$avg: "$duration"}}},
{$sort: {_id: -1}}
])
$match
db.movies.aggregate([
{$match: {director: {$exists: true}}},
{$group: {_id: "$director", movieCount: {$sum: 1}}},
{$sort: {movieCount: -1}}
])
match๋ ํํฐ๋ง ์ญํ
$project, $limit
db.movies.aggregate([
{$project: {title: 1, director: 1, cast: 1, _id: 0}},
{$limit: 10}
])
$project๋ ๊ฐ์ ธ์ฌ key๋ค๋ง ์ง์ ๊ฐ๋ฅ(1์ ์ ํ, 0์ ์ ํ ์ ํจ), $limit์ ๊ฐ์ ์ ํ
https://www.mongodb.com/ko-kr/docs/manual/reference/mql/aggregation-stages/
์ ๊ทธ๋ฆฌ๊ฒ์ด์ ๋จ๊ณ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งค๋ด์ผ - MongoDB Docs
db.collection.aggregate() ๋ฐ ๋ฉ์๋์์ db.aggregate() ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ ๋ฐฐ์ด ๋ก ๋ํ๋ฉ๋๋ค. ๋ฌธ์๋ ์์๋๋ก ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค. Atlas UI ์์ ์ง๊ณ ํ์ดํ๋ผ์ธ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ์ ๋ ฌ
www.mongodb.com
'๐ฑ MongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MongoDB - Mongoose (0) | 2026.04.14 |
|---|---|
| MongoDB - MongoDB with Python (0) | 2026.04.13 |
| MongoDB - Installation(macOS homebrew) (0) | 2026.04.07 |