λνλ¨ΌνΈ λ°μ΄ν°λ² μ΄μ€λ λ°μ΄ν°λ₯Ό ν μ΄λΈμ΄ μλ, λ¬Έμμ²λΌ μ μ₯νλ λ°μ΄ν°λ² μ΄μ€λ₯Ό μλ―Ένλ€.
λ°μ΄ν° λ² μ΄μ€ μμ²΄κ° μ²΄κ³μ μΌλ‘ νμΌμ μ μ₯νκ³ μ κ·Όνλ κ²μ΄λΌ SQLμ μ¬μ©νλ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ NoSQL λ°μ΄νΈλ² μ΄μ€λ 체κ³μ μ΄λΌκ³ ν μ μλ€.
μΌλ°μ μΌλ‘ JSON μ μ¬ νμμΌλ‘ λ°μ΄ν°λ₯Ό λ¬Έμννκ³ , λ°μ΄ν°λ₯Ό field-value
ννλ‘ κ°μ§κ³ μμΌλ©°, collection
μ΄λΌκ³ νλ κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ κ΄λ¦¬νλ€.
NoSQL β κ΄κ³ν ν μ΄λΈμ λ κ±°μν λ°©λ²μ μ¬μ©νμ§ μλ λ°μ΄ν° μ μ₯μλ₯Ό λ»νλ€.
λΉκ΅¬μ‘°μ μΈ λμ©λμ λ°μ΄ν°λ₯Ό μ μ₯νλ κ²½μ°
NoSQL λ°μ΄ν° λ² μ΄μ€λ SQLλ°μ΄ν° λ² μ΄μ€μ λΉν΄ μμ λ‘μ΄ ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν μ μκΈ°μ μ ννλμ§ μμ λ§μ λμ λ°μ΄ν°κ° νμν κ²½μ°, ν¨μ¨μ μΌ μ μλ€.
ν΄λΌμ°λ μ»΄ν¨ν λ° μ μ₯곡κ°μ μ΅λν νμ©νλ κ²½μ°
SQL λ°μ΄ν° λ² μ΄μ€κ° λ°μ΄ν° λ² μ΄μ€λ₯Ό νμ₯ν λ μμ§μ μΌλ‘ μ¦μ€ν΄μΌνλ λ°λ©΄μ NoSQL λ°μ΄ν° λ² μ΄μ€λ μνμ ννλ‘ μ¦μ€νλ―λ‘, μ΄λ‘ μ μΌλ‘ 무νλλ‘ DBλ₯Ό μ¦μ€ν μ μλ€.
μ΄λ NoSQL λ°μ΄ν° λ² μ΄μ€κ° λ°μ΄ν°λ² μ΄μ€λ₯Ό ν΄λΌμ°λ κΈ°λ°μΌλ‘ μ½κ² λΆλ¦¬ν μ μλλ‘ μ§μν΄μ μ μ₯곡κ°μ ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° λλ¬Έμ΄λ€.
λΉ λ₯΄κ² μλΉμ€λ₯Ό ꡬμΆνκ³ λ°μ΄ν° ꡬ쑰λ₯Ό μμ£Ό μ λ°μ΄νΈ νλ κ²½μ°
μ€ν€λ§λ₯Ό 미리 μ€λΉν νμκ° μκΈ°μ κ°λ°μ΄ λΉ λ₯΄κ² μ§νλλ νκ²½μ μ ν©νλ€.
λͺ½κ³ DBμμ μνλΌμ€λ‘ ν΄λΌμ°λμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ€μ νλ©° μνλΌμ€λ GUIμ CLIλ‘ λ°μ΄ν° μκ°ν, λΆμ, λ΄λ³΄λ΄κΈ°, λΉλνλλ° μ¬μ©ν μ μλ€.
μνλΌμ€ μ¬μ©μλ ν΄λ¬μ€ν°λ₯Ό λ°°ν¬ν μ μμΌλ©°, ν΄λ¬μ€ν°λ κ·Έλ£Ήνλ μλ²μ λ°μ΄ν°λ₯Ό μ μ₯νλ€.
ν΄λ¬μ€ν°λ₯Ό μ΄μ©ν΄ λ°°ν¬νλ©΄ μλμ μΌλ‘ λ ν리카 μΈνΈλ₯Ό μμ±νλ€.
ν΄λ¬μ€ν° β νλμ μμ€ν μ²λΌ μλνλ μΈμ€ν΄μ€λ€μ λͺ¨μ, νμ΄μ λ§νλ©΄ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ² κ·Έλ£ΉμΌλ‘ λΆν° μ¬λ¬ λμ μ»΄ν¨ν°λ₯Ό λ€νΈμν¬λ₯Ό ν΅ν΄ μ°κ²°ν΄ νλμ λ¨μΌ μ»΄ν¨ν°μ²λΌ λμνλλ‘ λ§λ μ»΄ν¨ν°λ₯Ό λ»νλ€.
λ ν리카 μΈνΈ β λμΌν λ°μ΄ν°λ₯Ό μ μ₯νλ μμμ μ°κ²°λ λ¨Έμ μ λ»νλ©°, μΈμ€ν΄μ€ μ€ νλμ λ¬Έμ κ° μκΈ°λλΌλ λ°μ΄ν°λ₯Ό κ·Έλλ‘ μ μ§ν μ μλ μ₯μ μ΄ μλ€. μ¦, λ¨μΌ ν΄λ¬μ€νΈμμ λμΌν 볡μ λ³Έμ κ°μ§κ³ μλ κ°κ°μ μΈμ€ν΄μ€λ€μ λͺ¨μμ΄λ€.
rs.status() λͺ λ Ήμ΄λ‘ νμΈ κ°λ₯νλ€.
μΈμ€ν΄μ€ β νΉμ μννΈ μ¨μ΄λ₯Ό μ€ννλ λ‘컬 λλ ν΄λΌμ°λμ λ¨μΌ λ¨Έμ , μμ κ²½μ° μΈμ€ν΄μ€λ ν΄λΌμ°λμμ μ€νλλ λͺ½κ³ DB λ°μ΄ν°λ² μ΄μ€ μ΄λ€.
λͺ½κ³ dbμμ κ°μ²΄ ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯νκ² λλ€.
{
field1: value,
field2: value,
"name": "sunghoon",
"age": 26
}
μ¬κΈ° νλμ 컬λ μ μ΄ μλ€.
SQLλ‘ μκ°νμλ©΄ νλμ ν μ΄λΈμ΄λΌκ³ μκ°νλ©΄ νΈν λ― νλ€.
μ΄ μμ collection
μ document
μμ 4κ°μ field
μ value
μμ΄ μλ€.
Document
νλ - κ° μμΌλ‘ μ μ₯λ λ°μ΄ν°
SQLμ record, rowμ ν΄λΉνλ κ°λ μ΄λ€.
Field
λ°μ΄ν° ν¬μΈνΈλ₯Ό μν κ³ μ ν μλ³μ
SQLμμλ μ°μ΄μ§λ§ SQLμμλ columnμ΄λΌκ³ λ νλ€.
Value
μ£Όμ΄μ§ μλ³μμ μ°κ²°λ λ°μ΄ν°
Collection
λνλ¨ΌνΈλ‘ ꡬμ±λ μ μ₯μμ΄λ©°, μΌλ°μ μΌλ‘ λνλ¨ΌνΈ κ°μ κ³΅ν΅ νλκ° μλ€.
SQLμμ tableμ ν΄λΉνλ κ°λ μ΄λ€.
shellμ μ΄μ©ν΄μ λνλ¨ΌνΈλ₯Ό μ‘°ννκ±°λ μ λ°μ΄νΈ ν λ, λνλ¨ΌνΈλ JSON νμμΌλ‘ μΆλ ₯λλ€.
μ΄λ μλ°μ€ν¬λ¦½νΈ μΈν°ν리ν°λ‘ μλνλ mongo shellμ μ λ ¬λμ§ μμ κ²°κ³Όλ¬Ό 리μ€νΈλ₯Ό λ°ννλ©°, GUI μμ΄ μνλΌμ€ ν΄λ¬μ€ν°μ μνΈμμ©ν μ μλ μ₯μ μ΄ μλ€.
JSON νμμΌλ‘ λνλ¨ΌνΈ μμ±νκΈ° μν΄μ νμν 쑰건 λͺκ°μ§λ₯Ό μκ°νμλ©΄,
{}
λ‘ λνλ¨ΌνΈκ° μμνκ³ , λλμΌ νλ€.:
μΌλ‘ λΆλ¦¬λμ΄μΌ νλ©° κ° νλμ κ°μ μμ μΌν ,
λ‘ κ΅¬λΆλλ€."
λ‘ κ°μΈμ ΈμΌ νλ€.JSON νμμ λ¨μ
μ΄λ₯Ό 극볡νκΈ° μν΄ BSON ( Binary JSON ) νμμ΄ λ±μ₯νκ³ , BSONμ μ»΄ν¨ν° μΈμ΄μ κ°κΉμ΄ μ΄μ§λ²μ κΈ°λ°μ λ ννλ²μ΄κΈ°μ λ©λͺ¨λ¦¬ μ¬μ©μ΄ λΉκ΅μ ν¨μ¨μ μ΄λ©° λΉ λ₯΄κ³ , κ°λ³κ³ μ μ°νλ€( λ λ§μ λ°μ΄ν° νμ μ¬μ©μ΄ κ°λ₯νλ€.).
λ°°μ°κ³ μλ MongoDB μμ JSON νμμ λ°λΌ λ°μ΄ν° λ² μ΄μ€μ μ 보λ₯Ό μ λ ₯νκ³ , μΆλ ₯ν μ μμ§λ§ λμ 보μ΄μ§ μλ λ°μ΄ν° λ² μ΄μ€ λ΄λΆμμλ BSONμ νμμΌλ‘ λ°μ΄ν°λ₯Ό νμ©νκ³ μλ€.
Atlas Cluster URI
"mongodb+srv://:@.mongodb.net/"
JSON νμ β mongoimport
mongoimport --uri "<Atlas Cluster URI>" --drop=<filename>.json
λ€μ --collection
κ³Ό κ°μ μ΅μ
μ λΆκ°μ μΌλ‘ μΆκ°ν μ μλ€.
μ΄ λͺ
λ Ήμ΄λ JSON νμΌμ κ΅νλμ μ¬μ©νλκ² μλλΌ csv
λ±μ λ°μ΄ν° νμμΌλ‘λ μ¬μ©ν μ μλ€.
BSON νμ β mongorestore
mongorestore --uri "<Atlas Cluster URI>" --drop dump
JSON νμ β mongoexport
mongoexport
--uri "<Atlas Cluster URI>"
--collection=<collection name>
--out=<filename>.json
BSON νμ β mongodump
mongodump --uri "<Atlas Cluster URI>"
BSON νμμΌλ‘ λ΄λ³΄λΌλλ λ³λ€λ₯Έ μΏΌλ¦¬κ° νμνμ§ μμ§λ§ JSON νμμΌλ‘ λ΄λ³΄λΌλλ 컬λ μ μ΄λ¦κ³Ό λ΄λ³΄λΌ νμΌμ΄λ¦κΉμ§ μ ννκ² μμ±ν΄μ€μΌνλ€.
MongoDBμ λͺ¨λ λνλ¨ΌνΈλ€μ κ³ μ ν _id νλλ₯Ό κ°μ§κ³ μμ΄μΌνλ€.
νλμ κ°μ΄ κ°λλΌλ μμ΄λ κ°μ΄ λ€λ₯΄λ©΄ λ€λ₯Έ λνλ¨ΌνΈλ‘ μ·¨κΈνλ€.
λ°Έλ₯ κ°μ λ³΄ν΅ ObjectId νμ μΌλ‘ μ§μ νλ©° λ°λ‘ ν λΉν μ μμΌλ _id fieldμ valueλ₯Ό λ°λ‘ ν λΉνμ§ μλλ€λ©΄ ObjectId (12bytes, 24char) νμ μ κ°μΌλ‘ ν λΉλλ€.
κ·Έλ¦¬κ³ λνλ¨ΌνΈμ κ°μλ μ«μμ΄, λ¬Έμμ΄, λ°°μ΄, κ°μ²΄ λ±μ΄ μ¬ μ μλ€.
λνλ¨ΌνΈλ₯Ό λ§λλ λͺ
λ Ήμ΄λ db.collectionName.insert({"<field>": "<value>"})
μ΄λ€
κ΄νΈ μμ JSONμ ννλ‘ μνλ λνλ¨ΌνΈλ₯Ό μμ±νκ² λλ©΄ WritenReseult λΌλ κ²°κ³Ό κ°μ λ°ννκ² λλλ°
컬λ μ
μ λνλ¨ΌνΈ μΆκ°νλ λͺ
λ Ήμ΄κ° μ μμ μΌλ‘ μ€νλμλ€λ©΄ nInserted
λΌλ νλ μμ μΆκ°λ λνλ¨ΌνΈ μλ₯Ό νμΈ ν μ μμ κ²μ΄κ³ , λ§μΌ μ€ν¨νλ€λ©΄
μ΄ μμ nInserted
μ writeError
κ° μμ΄μ μ€ν¨ν μ΄μ λ νμΈν μ μλ€.
λνλ¨ΌνΈλ₯Ό νλ²μ μ¬λ¬κ° μΆκ°νλ €λ©΄ λ°°μ΄μ μ΄μ©ν΄μ μΆκ°ν΄μΌνλ©°,
db.collectionName.insert([{"<field>": "<value>"},{"<field>": "<value>"}])
μμ κ°μ΄ μ¬μ©ν μ μλ€.
νλ²μ μ¬λ¬ λνλ¨ΌνΈλ₯Ό μΆκ°νλ€ μ€κ°μ μλ¬κ° λ°μνκ² λλ©΄, ν΄λΉ μμ λͺ¨λ μ·¨μλλκ² μλλΌ μλ¬ λ°μνκΈ° μ΄μ λνλ¨ΌνΈλ μ μμ μΌλ‘ μΆκ°λκ³ μλ¬κ° λ°μν λνλ¨ΌνΈλΆν° μΆκ°λμ§ μλλ€.
λ§μ½ μλ¬κ° λ°μν λνλ¨ΌνΈλ§ 건λλ°κ³ λλ¨Έμ§ λνλ¨ΌνΈλ€μ μΆκ°νκ³ μΆμ κ²½μ°μλ insert()
μ λλ²μ§Έ μΈμμ {"ordered": "false"}
λ₯Ό μΆκ°ν΄μ£Όλ©΄ λλ€.
λ§μ½ μ‘΄μ¬νμ§ μλ 컬λ μ μ μΈμνΈνκ² λλ€λ©΄? ν΄λΉ 컬λ μ μ΄ μμ±λλ©΄μ μΈμνΈκ° μ§νλκ² λλ€.
컬λ μ
μμμ λνλ¨ΌνΈλ₯΄ μ°Ύλ λͺ
λ Ήμ΄λ‘λ db.collectionName.find({"field":"value"})
μ΄λ€.
μΆλ ₯ν λνλ¨ΌνΈκ° 20κ°κ° λμ΄κ°λ©΄ 20κ°λ§ μΆλ ₯μ νλ©° λ³λμ λͺ
λ Ήμ΄ it
λ₯Ό μ
λ ₯ν΄μ€μΌ λ€μ 20κ°κ° μ‘°νλλ€.
μ§μ ν νλμ μΌμΉνλ κ°μ κ°μ§ λνλ¨ΌνΈλ₯Ό μ°Ύμμ£Όλ λͺ λ Ήμ΄μ΄λ€.
λ€μ .pretty()
λ λΆνμ£Όλ©΄ 보기 μ’κ² λ°νν΄μ€λ€.
find()
μ μΈμλ‘ μ€μ ν 쑰건μ ν΄λΉνλ λνλ¨ΌνΈ μλ₯Ό νμΈνκ³ μΆλ€λ©΄ .count()
λ₯Ό λΆνμ£Όλ©΄ λλ€.
κ·Έλ¦¬κ³ ν΄λΉνλ 무μμμ λ°μ΄ν° νλλ§ κ°μ Έμ€κ³ μΆλ€λ©΄ find
λμ findOne
μ μ¬μ©ν μ μλ€.
db.collectionName.updateOne({},{})
μ μ¬μ©νκ² λλ©΄ 쿼리문μ ν΄λΉνλ 첫λ²μ§Έ λνλ¨ΌνΈλ§ μ
λ°μ΄νΈ νκ² λκ³ ,
db.collectionName.updateMany({},{})
λ₯Ό μ¬μ©νκ² λλ©° 쿼리문μ ν΄λΉνλ λͺ¨λ λνλ¨ΌνΈλ₯Ό μ
λ°μ΄νΈνκ² λλ€.
κ°κ°μ 첫λ²μ§Έ μΈμμλ λνλ¨ΌνΈλ₯Ό κ±Έλ¬λ΄κΈ° μν 쑰건μ ν΄λΉνλ 쿼리문μ μμ±νκ³ ,
λλ²μ§Έ μΈμμλ κ±Έλ¬λΈ λνλ¨ΌνΈμ μ΄λ€ νλμ κ°μ μ΄λ»κ² λ°κΏ κ²μΈμ§ μμ±νλ€.
ν΄λΉ λͺ λ Ήμ΄λ₯Ό μ¬μ©νκ² λλ©΄ matchedCount, modifiedCount λ±μ΄ ν€λ‘ μλ κ°μ²΄κ° λ°νλλ©° μ€ν κ²°κ³Όλ₯Ό μ΄ μ°½μμ νμΈν μ μλ€.
λ§μ½ νλκ°μ μλͺ» μ λ ₯νλ€λ©΄ μ€λ₯κ° λ°μνλ κ²μ΄ μλ, μλͺ» μ λ ₯ν νλ κ°μΌλ‘ ν΄λΉ λνλ¨ΌνΈ μμ νλ-κ° μμ΄ μΆκ°λκ² λλ€.
push μ°μ°μλ₯Ό μ¬μ©ν΄λ³Ό μ μλ€.
$inc: {field: valueToIncrease}
β ν΄λΉνλ λνλ¨ΌνΈμ fieldμ valueλ₯Ό valueToIncrease λ§νΌ μ¬λ¦°λ€.
$set : {field: valueToSet}
β ν΄λΉνλ λνλ¨ΌνΈμ fieldμ valueλ₯Ό valueToSet κ°μΌλ‘ μ€μ νλ€.
β ν΄λΉνλ νλ κ°μ΄ μμΌλ©΄ μλ‘ λ§λ λ€.
$push: {field: { innerField : "innerValue" } }
β ν΄λΉνλ λνλ¨ΌνΈμ fieldμ valueμ innerFieldλΌλ νλμ innerValueλΌλ κ° μμ μΆκ°νλ€.
β field λ₯Ό μλ΅ν΄λ μλνμ§λ§, κ·Έλ΄ κ²½μ° innerFieldλΌλ νλμ λΉ λ°°μ΄μ΄ κ°μΌλ‘ ν λΉλκ³ λ°°μ΄μ 첫λ²μ§Έ μΈμκ° innerValueκ° λλ€.
컬λ μ λ΄ λνλ¨ΌνΈλ₯Ό μμ νκΈ° μν΄μ μμ λκ°μ§ λͺ λ Ήμ΄κ° μλ€.
db.collectionName.deleteOne({})
μ
db.collectionName.deleteMany({})
λκ°μ§κ° μλλ°, μ
λ°μ΄νΈμ μ μ¬νκ² νλλ§ μμ ν κ²μΈκ°, μ¬λ¬κ° μμ ν κ²μΈκ° μ°¨μ΄λΌκ³ μκ°νλ©΄ λλ€.
컬λ μ μ μμ νκΈ° μν΄μλ
db.collectionName.drop()
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ db λ΄ ν΄λΉ 컬λ μ
μ΄ μμ λλ€.