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", ""))

도큐먼트는 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(
{
'_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}}
)