์ํ๋ผ์ค ํด๋ฌ์คํฐ์ ์ ์ํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฆฌ์คํธ ํ์ธํ๊ธฐ
show dbs
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ
use ๋ฐ์ดํฐ๋ฒ ์ด์ค_์ด๋ฆ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ ์ ๋ฆฌ์คํธ ํ์ธํ๊ธฐ
show collections
์ด์ CRUD๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
insert()
: ์๋ก์ด ๋ํ๋จผํธ๋ฅผ ์ถ๊ฐํ๋ค.
โก๏ธ ๋ชจ๋ ๋ํ๋จผํธ๊ฐ "_id" ํ๋๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ๊ฐ์ด ๋๊ฐ์๋ "_id"๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๋ํ๋จผํธ๋ก ์ทจ๊ธ๋๋ฉฐ, ๊ฐ์ด ๋ค๋ฅด๋๋ผ๋ "_id"๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ ๋ํ๋จผํธ๋ก ๊ฐ์ฃผ๋๋ฉฐ error๊ฐ ๋ฐ์ํ๋ค. ๋ํ๋จผํธ๋ฅผ ์ถ๊ฐํ ๋ "_id" ํ๋์ ๊ฐ์ ํน์ ํ์ง ์๋๋ค๋ฉด, ObjectId ํ์ ์ ๊ฐ์ผ๋ก ์๋์ ์ผ๋ก ํ ๋น๋๋ค.
๊ดํธ ์์ ์ฝ์
ํ๊ณ ์ ํ๋ ๋ํ๋จผํธ๋ฅผ ๋ฃ์ด์ค๋ค. ์๋ต์ผ๋ก "nInsert" : 1
๋ฅผ ํตํด ๋ํ๋จผํธ 1๊ฐ๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ์ ์ ์๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.insert({ "_id" : 1, // ์์ผ๋ฉด ์๋ ObjectId๋ก ํ ๋น๋จ "name" : "jabae", "number" : 1 })
๋ฐฐ์ด ์์ ๋ด์์ฃผ์ด ๋ํ๋จผํธ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฝ์ ํ ์ ์๋ค. ์ฝ์ ๋ ๋์๋ ๋ฐฐ์ด์ ์์๋๋ก ์ฝ์ ๋๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.insert([{"name" : "jihyu", "number" : 2}, {"name" : "hyupa", "number" : 3}])
๋ง์ฝ ๊ธฐ์กด์ ์กด์ฌํ๋ "_id"๊ณผ ๋์ผํ ๊ฐ์ ๋ํ๋จผํธ๋ฅผ ํ ๊ฐ ์ฝ์ ํ ๊ฒฝ์ฐ, duplicate key ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋ณผ ์ ์๋ค. ์ด๋ ์ด๋ฏธ ๊ฐ์ "_id" ๊ฐ์ ๊ฐ์ง๋ ๋ํ๋จผํธ๊ฐ ์ปฌ๋ ์ ๋ด๋ถ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ ์ฝ์ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.insert({"_id" : 1, "name" : "harry", "number" : 4}) // ์ด๋ฏธ ์ปฌ๋ ์ ์์ ๊ฐ์ "_id" ๊ฐ์ ๋ํ๋จผํธ๊ฐ ์๋ค๋ฉด, writeResult({ // ์๋ต, "nInsert" : 0, // ๋ํ๋จผํธ ์ถ๊ฐ ์คํจ "writeError" : { "code" : 11000, "errmsg" : "E11000 duplicate key error collection: ..." // duplicate key ์๋ฌ } })
๋ค๋ฅธ ์์๋ก ์ถ๊ฐํ๋ ค๋ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์ค, ๋์ผํ "_id"๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด? ๋ฐฐ์ด ์์ ๋ฆฌ์คํธ ์์๋๋ก ์ฝ์ ๋๋ฉฐ, ์๋ฌ๊ฐ ๋๋ ์ธ๋ฑ์ค๋ถํฐ๋ ์ฝ์ ๋์ง ์๋๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.insert([{"_id" : 1, "content" : "test1"}, {"_id" : 1, "content" : "test2"}, {"_id" : 2, "content" : "test3"}]) BulkWriteResult({ // ์๋ต, "writeErrors" : [ { "index" : 1, // ์๋ฌ๊ฐ ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์๋ ค์ค "code" : 11000, "errmsg" : E11000 duplicate key error collection: ..." "op" : { // ์ค๋ณต๋ "_id" ๊ฐ์ ๋ฃ์ ๋ํ๋จผํธ๋ฅผ ์๋ ค์ค "_id" : 1, "content" : "test2" } } ], ... "nInsert" : 1, // ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๋ํ๋จผํธ๋ง ์ถ๊ฐ๋จ ... })
์๋ฌ ์ดํ๋ถํฐ๋ ์ฝ์
์ด ๋์ง ์๋๋ฐ, ์ด๋ ์์
์์๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ค๋ณต๋ ๊ฐ ์ด์ธ์ ๋ํ๋จผํธ๋ฅผ ์ฝ์
ํ ์ ์๋ค. ๐ฅ {"ordered" : false}
๋ฅผ ๋ฃ์ด์ฃผ์ด ์์์ ์๊ด์์ด ๊ณ ์ _id๋ฅผ ๊ฐ์ง ๋ํ๋จผํธ๋ฅผ ์ปฌ๋ ์
์ ์ฝ์
ํ ์ ์๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.insert([{"_id" : 1, "content" : "test1"}, {"_id" : 1, "content" : "test2"}, {"_id" : 2, "content" : "test3"}], {"ordered" : false})
๊ธฐ์กด์ ์๋ ์ปฌ๋ ์
์ .insert()
๋ก ๋ํ๋จผํธ๋ฅผ ์ฝ์
ํ ๊ฒฝ์ฐ, ์ปฌ๋ ์
์ด ๋ง๋ค์ด์ง๋ ๋์์ ๋ํ๋จผํธ๊ฐ ์ฝ์
๋๋ค. ์ด๋ MongoDB๊ฐ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ปฌ๋ ์
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋๋ก ํ ์ ์๊ฒ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
db.์๋_์ปฌ๋ ์ _์ด๋ฆ.insert({"contents" : "test1"}) writeResult({"nInsert" : 1}) // ์๋ต, ๋ํ๋จผํธ 1๊ฐ๊ฐ ์ถ๊ฐ๋จ show collections // ์ปฌ๋ ์ ์กฐํ ๋ช ๋ น์ด ์๋_์ปฌ๋ ์ _์ด๋ฆ // ์ปฌ๋ ์ ์ด ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค!
find()
: ๊ดํธ ์ ์กฐ๊ฑด(์ฟผ๋ฆฌ๋ฌธ)์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. ์ฟผ๋ฆฌ๋ฌธ์ด ์๋ค๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค.findOne()
: ๊ดํธ ์์ ์กฐ๊ฑด(์ฟผ๋ฆฌ๋ฌธ)์ด ์๋ค๋ฉด ๊ทธ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋, ์๋ค๋ฉด ๋๋ค์ผ๋ก 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. ์ฃผ๋ก "_id"๋ฅผ ํตํด ์ ๊ทผํด ์ ์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉํ๋ค.
๊ดํธ ์์ ์กฐ๊ฑด์ ๋ฃ์ด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒ์ธ์ง ์กฐ๊ฑด์ ๊ฑธ์ด์ค๋ค. ์กฐ๊ฑด์ด ๋ ๊ฐ ์ด์์ด๋ผ๋ฉด, .find({์กฐ๊ฑด_1, ์กฐ๊ฑด_2)
ํํ๋ก ์์ฑํ๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.find({"score": 100}) // score๊ฐ 100์ธ ๋ฐ์ดํฐ ์กฐํ db.์ปฌ๋ ์ _์ด๋ฆ.find({"score": 100, "class": "math"}) // score๊ฐ 100์ด๋ฉด์ ํด๋์ค๊ฐ math์ธ ๋ฐ์ดํฐ ์กฐํ
์กฐ๊ฑด์ ๋ง๋ ๊ฒฐ๊ณผ๋ ๋๋คํ๊ฒ ์ ํ๋ 20๊ฐ๋ง ์ถ๋ ฅ๋๋ค. ๋ค์ 20๊ฐ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด Type "it" for more
๋ผ๋ ์๋ด์ ๋ง๊ฒ iterate
์ ์ค์๋ง์ธ it
์ ์
๋ ฅํ๋ฉด ๋๋ค.
์กฐ๊ฑด์ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ ์ ์๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.find()
.find()
๋ค์ .pretty()
๋ฅผ ๋ถ์ด๋ฉด, ๋ํ๋จผํธ์ ๊ตฌ์กฐ์ ๊ฐ๊ฐ์ ํ๋-๊ฐ ์์ ๋ง์ถฐ ์ ๋ ฌํ์ฌ ๋ณด๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๋ค. .count()
๋ ๋ฐ์ดํฐ ์๋ฅผ ์กฐํํ๋ ๋ช
๋ น์ด์ด๋ค.
updateOne()
: ์ฃผ์ด์ง ๊ธฐ์ค์ ๋ง๋ ๋ค์์ ๋ํ๋จผํธ ์ค ์ฒซ๋ฒ์งธ ๋ํ๋จผํธ ํ๋๋ง ์ ๋ฐ์ดํธํ๋ค.updateMany()
: ๊ดํธ ์์ ์กฐ๊ฑด(์ฟผ๋ฆฌ๋ฌธ)๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๋ํ๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
({์
๋ฐ์ดํธ_๋ํ๋จผํธ_์กฐ๊ฑด}, {์ฐ์ฐ์: {ํ๋ : ์
๋ฐ์ดํธ_๊ฐ}})
์ ํํ๋ก ์ฌ์ฉํ๋ค. ์๋ต์ผ๋ก "matchCount" : ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ํ๋จผํธ ์
, "modifiedCount" : ๋ณ๊ฒฝ๋ ๋ํ๋จผํธ ์
๋ฅผ ํตํด ์ ์ฒ๋ฆฌ๋์๋ ์ง ์ ์ ์๋ค.
์๋๋ teacher์ ๊ฐ์ด sara์ธ ๋ํ๋จผํธ์ ํ๋๋ค์ ๋ชจ๋ score์ ๊ฐ์ 10์ฉ ์ฆ๊ฐ์ํค๋ ๋ช
๋ น์ด์ด๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.updateMany({"teacher" : "sara"}, {$inc : {"score" : 10}})
ํด๋น๋๋ ํน์ ํ๋๊ฐ ์์ ๊ฒฝ์ฐ, ํ๋๊ฐ ์ถ๊ฐ๋๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.updateOne({"_id" : 1}, {$set : {"score" : 80}}) // score๋ฅผ 80์ผ๋ก ๋ณ๊ฒฝํจ db.์ปฌ๋ ์ _์ด๋ฆ.updateOne({"_id" : 1}, {$set : {"homework" : 20}}) // homework ํ๋๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ๋จ
({์
๋ฐ์ดํธ_๋ํ๋จผํธ_์กฐ๊ฑด}, {์ฐ์ฐ์: {๋ฐฐ์ดํ์
์_ํ๋ : {์ถ๊ฐํ _์๋ธ_๋ํ๋จผํธ(๋ฐฐ์ด์์)}}})
์ ํํ๋ก ์ฌ์ฉํ๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.updateMany({"teacher" : "sara"}, {$push : {"all scores" : {"type" : "last exam", "score" : 90}}})
deleteOne()
: ์ฃผ์ด์ง ๊ธฐ์ค์ ๋ง๋ ๋ค์์ ๋ํ๋จผํธ ์ค ์ฒซ๋ฒ์งธ ๋ํ๋จผํธ ํ๋๋ฅผ ์ญ์ ํ๋ค. ์กฐ๊ฑด์ ๋ง๋ ๋ํ๋จผํธ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด, ์๋ํ์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ์ ์์ผ๋ฏ๋ก "_id" ๊ฐ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ด๋ค.deleteMany()
: ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๋ํ๋จผํธ๋ฅผ ์ญ์ ํ๋ค.
์๋ต์ผ๋ก "deletedCount" : ์ญ์ ๋ ์
๋ฅผ ํตํด ์ ์๋ํ๋์ง ํ์ธํ ์ ์๋ค.
db.์ปฌ๋ ์ _์ด๋ฆ.deleteMany({"score" : 10}) // "score"๊ฐ 10์ ํด๋นํ๋ ๋ํ๋จผํธ ์ ์ฒด ์ญ์ db.์ปฌ๋ ์ _์ด๋ฆ.deleteOne({"_id" : 1}) // "_id"๊ฐ 1์ธ ๋ํ๋จผํธ 1๊ฐ ์ญ์
์๋ต์ผ๋ก true
๋ฅผ ํตํด ์ ์๋ํ๋์ง ํ์ธํ ์ ์๋ค. (drop
์ ์์ Importing์์ ๊ธฐ์กด์ ์ปฌ๋ ์
๊ณผ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ ์ฌ์ด์ duplicate key ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ ํ์๋ค.)
db.์ญ์ ํ _์ปฌ๋ ์ _์ด๋ฆ.drop()