TIL - 21.09.03 πŸ‘¨β€πŸ’» - NoSQL

μ„±ν›ˆΒ·2021λ…„ 9μ›” 6일
0

TIL

λͺ©λ‘ 보기
56/59
post-thumbnail

TIL - 21.09.03 πŸ‘¨β€πŸ’»

λ„νλ¨ΌνŠΈ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 데이터λ₯Ό ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ, λ¬Έμ„œμ²˜λŸΌ μ €μž₯ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ˜λ―Έν•œλ‹€.

데이터 베이슀 μžμ²΄κ°€ μ²΄κ³„μ μœΌλ‘œ νŒŒμΌμ„ μ €μž₯ν•˜κ³  μ ‘κ·Όν•˜λŠ” 것이라 SQL을 μ‚¬μš©ν•˜λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ NoSQL λ°μ΄νŠΈλ² μ΄μŠ€λ‚˜ 체계적이라고 ν•  수 μžˆλ‹€.

일반적으둜 JSON μœ μ‚¬ ν˜•μ‹μœΌλ‘œ 데이터λ₯Ό λ¬Έμ„œν™”ν•˜κ³ , 데이터λ₯Ό field-value ν˜•νƒœλ‘œ 가지고 있으며, collection이라고 ν•˜λŠ” 그룹으둜 λ¬Άμ–΄μ„œ κ΄€λ¦¬ν•œλ‹€.

NoSQL β†’ κ΄€κ³„ν˜• ν…Œμ΄λΈ”μ˜ λ ˆκ±°μ‹œν•œ 방법을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 데이터 μ €μž₯μ†Œλ₯Ό λœ»ν•œλ‹€.

NoSQL 기반의 λΉ„κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 경우

  1. 비ꡬ쑰적인 λŒ€μš©λŸ‰μ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 경우

    NoSQL 데이터 λ² μ΄μŠ€λŠ” SQL데이터 λ² μ΄μŠ€μ— λΉ„ν•΄ 자유둜운 ν˜•νƒœλ‘œ 데이터λ₯Ό μ €μž₯ν•  수 μžˆκΈ°μ— μ •ν˜•ν™”λ˜μ§€ μ•Šμ€ λ§Žμ€ λŸ‰μ˜ 데이터가 ν•„μš”ν•  경우, 효율적일 수 μžˆλ‹€.

  2. ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… 및 μ €μž₯곡간을 μ΅œλŒ€ν•œ ν™œμš©ν•˜λŠ” 경우

    SQL 데이터 λ² μ΄μŠ€κ°€ 데이터 베이슀λ₯Ό ν™•μž₯ν• λ•Œ 수직적으둜 μ¦μ„€ν•΄μ•Όν•˜λŠ” λ°˜λ©΄μ— NoSQL 데이터 λ² μ΄μŠ€λŠ” μˆ˜ν‰μ  ν˜•νƒœλ‘œ μ¦μ„€ν•˜λ―€λ‘œ, 이둠적으둜 λ¬΄ν•œλŒ€λ‘œ DBλ₯Ό 증섀할 수 μžˆλ‹€.

    μ΄λŠ” NoSQL 데이터 λ² μ΄μŠ€κ°€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν΄λΌμš°λ“œ 기반으둜 μ‰½κ²Œ 뢄리할 수 μžˆλ„λ‘ μ§€μ›ν•΄μ„œ μ €μž₯곡간을 효율적으둜 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

  3. λΉ λ₯΄κ²Œ μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜κ³  데이터 ꡬ쑰λ₯Ό 자주 μ—…λ°μ΄νŠΈ ν•˜λŠ” 경우

    μŠ€ν‚€λ§ˆλ₯Ό 미리 μ€€λΉ„ν•  ν•„μš”κ°€ 없기에 개발이 λΉ λ₯΄κ²Œ μ§„ν–‰λ˜λŠ” ν™˜κ²½μ— μ ν•©ν•˜λ‹€.

Atlas

λͺ½κ³ DB에선 μ•„ν‹€λΌμŠ€λ‘œ ν΄λΌμš°λ“œμ— λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ„€μ •ν•˜λ©° μ•„ν‹€λΌμŠ€λŠ” GUI와 CLI둜 데이터 μ‹œκ°ν™”, 뢄석, 내보내기, λΉŒλ“œν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆλ‹€.

μ•„ν‹€λΌμŠ€ μ‚¬μš©μžλŠ” ν΄λŸ¬μŠ€ν„°λ₯Ό 배포할 수 있으며, ν΄λŸ¬μŠ€ν„°λŠ” κ·Έλ£Ήν™”λœ μ„œλ²„μ— 데이터λ₯Ό μ €μž₯ν•œλ‹€.

ν΄λŸ¬μŠ€ν„°λ₯Ό μ΄μš©ν•΄ λ°°ν¬ν•˜λ©΄ μžλ™μ μœΌλ‘œ λ ˆν”Œλ¦¬μΉ΄ μ„ΈνŠΈλ₯Ό μƒμ„±ν•œλ‹€.

ν΄λŸ¬μŠ€ν„° β†’ ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ²˜λŸΌ μž‘λ™ν•˜λŠ” μΈμŠ€ν„΄μŠ€λ“€μ˜ λͺ¨μž„, ν’€μ–΄μ„œ λ§ν•˜λ©΄ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ„œλ²„ 그룹으둜 λΆ€ν„° μ—¬λŸ¬ λŒ€μ˜ 컴퓨터λ₯Ό λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ—°κ²°ν•΄ ν•˜λ‚˜μ˜ 단일 μ»΄ν“¨ν„°μ²˜λŸΌ λ™μž‘ν•˜λ„λ‘ λ§Œλ“  컴퓨터λ₯Ό λœ»ν•œλ‹€.

λ ˆν”Œλ¦¬μΉ΄ μ„ΈνŠΈ β†’ λ™μΌν•œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ†Œμˆ˜μ˜ μ—°κ²°λœ 머신을 λœ»ν•˜λ©°, μΈμŠ€ν„΄μŠ€ 쀑 ν•˜λ‚˜μ— λ¬Έμ œκ°€ 생기더라도 데이터λ₯Ό κ·ΈλŒ€λ‘œ μœ μ§€ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€. 즉, 단일 ν΄λŸ¬μŠ€νŠΈμ—μ„œ λ™μΌν•œ λ³΅μ œλ³Έμ„ 가지고 μžˆλŠ” 각각의 μΈμŠ€ν„΄μŠ€λ“€μ˜ λͺ¨μŒμ΄λ‹€.

rs.status() λͺ…λ Ήμ–΄λ‘œ 확인 κ°€λŠ₯ν•˜λ‹€.

μΈμŠ€ν„΄μŠ€ β†’ νŠΉμ • μ†Œν”„νŠΈ 웨어λ₯Ό μ‹€ν–‰ν•˜λŠ” 둜컬 λ˜λŠ” ν΄λΌμš°λ“œμ˜ 단일 λ¨Έμ‹ , μœ„μ˜ 경우 μΈμŠ€ν„΄μŠ€λŠ” ν΄λΌμš°λ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” λͺ½κ³ DB λ°μ΄ν„°λ² μ΄μŠ€ 이닀.

MongoDB Document

λͺ½κ³  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에 ν•΄λ‹Ήν•˜λŠ” κ°œλ…μ΄λ‹€.

MongoDBμ—μ„œ shell둜 데이터 μˆ˜μ •ν• λ•Œ

shell을 μ΄μš©ν•΄μ„œ λ„νλ¨ΌνŠΈλ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈ ν•  λ•Œ, λ„νλ¨ΌνŠΈλŠ” JSON ν˜•μ‹μœΌλ‘œ 좜λ ₯λœλ‹€.

μ΄λ•Œ μžλ°”μŠ€ν¬λ¦½νŠΈ μΈν„°ν”„λ¦¬ν„°λ‘œ μž‘λ™ν•˜λŠ” mongo shell은 μ •λ ¬λ˜μ§€ μ•Šμ€ κ²°κ³Όλ¬Ό 리슀트λ₯Ό λ°˜ν™˜ν•˜λ©°, GUI 없이 μ•„ν‹€λΌμŠ€ ν΄λŸ¬μŠ€ν„°μ™€ μƒν˜Έμž‘μš©ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€.

JSON ν˜•μ‹μœΌλ‘œ λ„νλ¨ΌνŠΈ μž‘μ„±ν•˜κΈ° μœ„ν•΄μ„œ ν•„μš”ν•œ 쑰건 λͺ‡κ°€μ§€λ₯Ό μ†Œκ°œν•˜μžλ©΄,

  1. μ€‘κ΄„ν˜Έ {} 둜 λ„νλ¨ΌνŠΈκ°€ μ‹œμž‘ν•˜κ³ , λλ‚˜μ•Ό ν•œλ‹€.
  2. ν•„λ“œμ™€ 값이 콜둠 : 으둜 λΆ„λ¦¬λ˜μ–΄μ•Ό ν•˜λ©° 각 ν•„λ“œμ™€ κ°’μ˜ μŒμ€ μ‰Όν‘œ , 둜 κ΅¬λΆ„λœλ‹€.
  3. λ¬Έμžμ—΄μΈ ν•„λ“œλ„ μŒλ”°μ˜΄ν‘œ " 둜 감싸져야 ν•œλ‹€.

JSON ν˜•μ‹μ˜ 단점

  1. νŒŒμ‹±μ΄ 느리고 λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ λΉ„νš¨μœ¨μ μ΄λ‹€.
  2. κΈ°λ³Έ 데이터 νƒ€μž…λ§Œ μ§€μ›ν•˜κΈ°μ— 데이터 νƒ€μž…μ— μ œμ•½μ΄ μžˆλ‹€.

이λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ BSON ( Binary JSON ) ν˜•μ‹μ΄ λ“±μž₯ν–ˆκ³ , BSON은 컴퓨터 언어에 κ°€κΉŒμš΄ 이진법에 κΈ°λ°˜μ„ λ‘” ν‘œν˜„λ²•μ΄κΈ°μ— λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ 비ꡐ적 효율적이며 λΉ λ₯΄κ³ , 가볍고 μœ μ—°ν•˜λ‹€( 더 λ§Žμ€ 데이터 νƒ€μž… μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.).

배우고 μžˆλŠ” MongoDB μ—­μ‹œ JSON ν˜•μ‹μ„ 따라 데이터 λ² μ΄μŠ€μ— 정보λ₯Ό μž…λ ₯ν•˜κ³ , 좜λ ₯ν•  수 μžˆμ§€λ§Œ λˆˆμ— 보이지 μ•ŠλŠ” 데이터 베이슀 λ‚΄λΆ€μ—μ„œλŠ” BSON의 ν˜•μ‹μœΌλ‘œ 데이터λ₯Ό ν™œμš©ν•˜κ³  μžˆλ‹€.

Importing & Exporting in 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 CRUD

MongoDB의 λͺ¨λ“  λ„νλ¨ΌνŠΈλ“€μ€ κ³ μœ ν•œ _id ν•„λ“œλ₯Ό 가지고 μžˆμ–΄μ•Όν•œλ‹€.

ν•„λ“œμ˜ 값이 같더라도 아이디 값이 λ‹€λ₯΄λ©΄ λ‹€λ₯Έ λ„νλ¨ΌνŠΈλ‘œ μ·¨κΈ‰ν•œλ‹€.

λ°Έλ₯˜ 값은 보톡 ObjectId νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜λ©° λ”°λ‘œ ν• λ‹Ήν•  수 μžˆμœΌλ‚˜ _id field의 valueλ₯Ό λ”°λ‘œ ν• λ‹Ήν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ObjectId (12bytes, 24char) νƒ€μž…μ˜ κ°’μœΌλ‘œ ν• λ‹Ήλœλ‹€.

그리고 λ„νλ¨ΌνŠΈμ˜ κ°’μ—λŠ” μˆ«μžμ—΄, λ¬Έμžμ—΄, λ°°μ—΄, 객체 등이 올 수 μžˆλ‹€.

CREATE - insert

λ„νλ¨ΌνŠΈλ₯Ό λ§Œλ“œλŠ” λͺ…λ Ήμ–΄λŠ” db.collectionName.insert({"<field>": "<value>"}) 이닀

κ΄„ν˜Έ μ•ˆμ— JSON의 ν˜•νƒœλ‘œ μ›ν•˜λŠ” λ„νλ¨ΌνŠΈλ₯Ό μž‘μ„±ν•˜κ²Œ 되면 WritenReseult λΌλŠ” κ²°κ³Ό 값을 λ°˜ν™˜ν•˜κ²Œ λ˜λŠ”λ°

μ»¬λ ‰μ…˜μ— λ„νλ¨ΌνŠΈ μΆ”κ°€ν•˜λŠ” λͺ…λ Ήμ–΄κ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλ‹€λ©΄ nInserted λΌλŠ” ν•„λ“œ μ•ˆμ— μΆ”κ°€λœ λ„νλ¨ΌνŠΈ 수λ₯Ό 확인 ν•  수 μžˆμ„ 것이고, 만일 μ‹€νŒ¨ν•œλ‹€λ©΄

이 μ•ˆμ— nInserted 와 writeError κ°€ μžˆμ–΄μ„œ μ‹€νŒ¨ν•œ μ΄μœ λ„ 확인할 수 μžˆλ‹€.

λ„νλ¨ΌνŠΈλ₯Ό ν•œλ²ˆμ— μ—¬λŸ¬κ°œ μΆ”κ°€ν•˜λ €λ©΄ 배열을 μ΄μš©ν•΄μ„œ μΆ”κ°€ν•΄μ•Όν•˜λ©°,

db.collectionName.insert([{"<field>": "<value>"},{"<field>": "<value>"}])

μœ„μ™€ 값이 μ‚¬μš©ν•  수 μžˆλ‹€.

ν•œλ²ˆμ— μ—¬λŸ¬ λ„νλ¨ΌνŠΈλ₯Ό μΆ”κ°€ν•˜λ‹€ 쀑간에 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ 되면, ν•΄λ‹Ή μž‘μ—… λͺ¨λ‘ μ·¨μ†Œλ˜λŠ”κ²Œ μ•„λ‹ˆλΌ μ—λŸ¬ λ°œμƒν•˜κΈ° 이전 λ„νλ¨ΌνŠΈλŠ” μ •μƒμ μœΌλ‘œ μΆ”κ°€λ˜κ³  μ—λŸ¬κ°€ λ°œμƒν•œ λ„νλ¨ΌνŠΈλΆ€ν„° μΆ”κ°€λ˜μ§€ μ•ŠλŠ”λ‹€.

λ§Œμ•½ μ—λŸ¬κ°€ λ°œμƒν•œ λ„νλ¨ΌνŠΈλ§Œ κ±΄λ„ˆλ›°κ³  λ‚˜λ¨Έμ§€ λ„νλ¨ΌνŠΈλ“€μ„ μΆ”κ°€ν•˜κ³  싢을 κ²½μš°μ—λŠ” insert() 의 λ‘λ²ˆμ§Έ μΈμžμ— {"ordered": "false"} λ₯Ό μΆ”κ°€ν•΄μ£Όλ©΄ λœλ‹€.

λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ— μΈμ„œνŠΈν•˜κ²Œ λœλ‹€λ©΄? ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μƒμ„±λ˜λ©΄μ„œ μΈμ„œνŠΈκ°€ μ§„ν–‰λ˜κ²Œ λœλ‹€.

READ - find

μ»¬λ ‰μ…˜ μ•ˆμ—μ„œ λ„νλ¨ΌνŠΈλ₯΄ μ°ΎλŠ” λͺ…λ Ήμ–΄λ‘œλŠ” db.collectionName.find({"field":"value"}) 이닀.

좜λ ₯ν•  λ„νλ¨ΌνŠΈκ°€ 20κ°œκ°€ λ„˜μ–΄κ°€λ©΄ 20개만 좜λ ₯을 ν•˜λ©° λ³„λ„μ˜ λͺ…λ Ήμ–΄ it λ₯Ό μž…λ ₯ν•΄μ€˜μ•Ό λ‹€μŒ 20κ°œκ°€ μ‘°νšŒλœλ‹€.

μ§€μ •ν•œ ν•„λ“œμ— μΌμΉ˜ν•˜λŠ” 값을 가진 λ„νλ¨ΌνŠΈλ₯Ό μ°Ύμ•„μ£ΌλŠ” λͺ…령어이닀.

뒀에 .pretty() 도 λΆ™ν˜€μ£Όλ©΄ 보기 μ’‹κ²Œ λ°˜ν™˜ν•΄μ€€λ‹€.

find() 의 인자둜 μ„€μ •ν•œ 쑰건에 ν•΄λ‹Ήν•˜λŠ” λ„νλ¨ΌνŠΈ 수λ₯Ό ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄ .count() λ₯Ό λΆ™ν˜€μ£Όλ©΄ λœλ‹€.

그리고 ν•΄λ‹Ήν•˜λŠ” λ¬΄μž‘μœ„μ˜ 데이터 ν•˜λ‚˜λ§Œ κ°€μ Έμ˜€κ³  μ‹Άλ‹€λ©΄ find λŒ€μ‹  findOne을 μ‚¬μš©ν•  수 μžˆλ‹€.

UPDATE - updateOne, updateMany

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κ°€ λœλ‹€.

DELETE

μ»¬λ ‰μ…˜ λ‚΄ λ„νλ¨ΌνŠΈλ₯Ό μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œ μ—­μ‹œ 두가지 λͺ…λ Ήμ–΄κ°€ μžˆλ‹€.

db.collectionName.deleteOne({}) 와

db.collectionName.deleteMany({}) 두가지가 μžˆλŠ”λ°, μ—…λ°μ΄νŠΈμ™€ μœ μ‚¬ν•˜κ²Œ ν•˜λ‚˜λ§Œ μ‚­μ œν•  것인가, μ—¬λŸ¬κ°œ μ‚­μ œν•  것인가 차이라고 μƒκ°ν•˜λ©΄ λœλ‹€.

μ»¬λ ‰μ…˜μ„ μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œλŠ”

db.collectionName.drop() λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ db λ‚΄ ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μ‚­μ œλœλ‹€.

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€