brew install mongodb-community
brew update
brew services start mongodb-community

mongosh 'mongodb+srv://*******:********@log.oa8nf.mongodb.net/logs'
show dbs
use car_accient    
show collections
db.by_month.stats()
db.by_month.count()

from pprint import pprint     #하면 좀더 깔끔하게 출력된다
{'city_or_province':{"$regex":"서"}}  # "서" 자가 들어간 도시가 나온다 
import os
from dotenv import load_dotenv

# /Users/jaeyeol/PycharmProjects/typescript/src
basedir = os.path.dirname(os.path.abspath(__file__))
# /Users/jaeyeol/PycharmProjects/typescript/src../.env
env_path = os.path.join(basedir, "../.env")
load_dotenv(dotenv_path = env_path)

MONGO_DB_NAME= os.environ.get("MONGO_DB_NAME", "")
MONGO_DB_PORT= int(os.environ.get("MONGO_DB_PORT", ""))

KakaoTalk_Photo_2022-01-31-00-19-09 002.jpeg

도큐먼트는 BSON(Binary JSON) 구조. name (field): “John” (value)

Object 타입의 경우 Embedded Document 라 해서 도큐먼트 내부의 값으로 도큐먼트를 갖는다.

Mongo DB는 도큐먼트가 생성할 때마다 primary key로 _id 필드를 자동적으로 생성한다.

ObjectId(”61f638fb 7fc632 3ea5 cee246”)

   — 유닉스 시간— 기기id — 프로세스 id — 카운터     ObjectId.getTimestamp()

MongoDB는 CRUD 작업을 성공적으로 마쳐도 장기 저장 장치에 바로 데이터를 저장하는 것이 아니라 메모리에 미리 저장한 후 천천히 장기 저장 장치로 데이터를 옮긴다. (메모리 데이터 손실 가능성)

원자성의 이해

CRUD 작업에 대해 ‘원자성’을 확보하고 있다. DB에는 작업이 ‘완료된 상태’가 되거나 ‘완료되기 전’ 상태만 존재하지, 그 중간 상태는 존재하지 않는다.

db.find ( <query>, <projection> ) → <documents>

db.find(
		{
       '_id': ObjectId(user_enrolled_homework['homework_id'])    # query
    },
		{'title':1}     # projection
)
# <pymongo.cursor.Cursor object at 0x108d2fdc0>

커서는 쿼리 결과에 대한 포인터. 만약 find문의 결과로 100만개의 도큐먼트가 커서를 반환하지 않고 직접 반환한다면, 엄청난 시간이 걸릴 것이다. 고로 더 나은 성능을 위해 사용.

db_server.update_many({'category':'animal'},
    {"$inc":{'weight':1}}
)