MongoDB에서 CRUD하기 전에
MongoDB의 기본 구조 먼저 알아야한다.
- Document: 관계형 데이터베이스의 행(row)에 해당한다.
- Collection: 관계형 데이터베이스의 테이블에 해당한다.
- Database: 관계형 DB의 테이블과 같은 개념
→ Document가 모여 Collection을 이루고, Collection이 모여 Database를 이룸
- Pymongo
pymongo란 mongoDB를 사용할 수 있게 해주는 파이썬 모듈이다.
다음과 같이 불러온다.
import pymongo
connection = pymongo.MongoClient("mongodb://localhost:27017/")
# 27017은 mongoDB 기본포트
- 도큐먼트 생성
이번에는 데이터베이스에 접속하여 컬렉션에 도큐먼트를 저장해보자.
(만약 만들어진 DB나 Collection이 없으면 불러들인 이름으로 자동생성됨)
db = connection.get_database("myDB") # myDB라는 DB에 접근
collection = db.get_collection("myCollection") # myCollection이라는 Collection에 접근
collection.insert_one({ "name": "hayan" }) # collection에 document 저장
1) connection.get_database("DB이름")를 사용하여 DB에 접속
2) collection이라는 변수에 db.get_collection("collection이름") 저장하여 컬렉션 생성
3) insert_one({"field" : "value"}) 사용하여 document 추가
여러 도큐먼트를 한번에 삽입하려면 insert_many() 사용하면 된다.
result = collection.insert_many(
[{"name":"hayan"}, { ... } ... ]
)
print(result.inserted_ids) # 입력된 도큐먼트들의 id값들을 출력
여기서 inserted_ids는 도큐먼트의 객체 id값을 가진다.
ObjectId 값은 ObjectId('542c2b97bac059498b48006')의 형식을 가지며 유일한 값이다.
Primary Key 라고 생각하면 좋다.
- 만들어진 데이터베이스, 컬렉션, 도큐먼트 확인
print(connection.list_database_names()) # DB 목록 조회
print(db.list_collection_names()) # 컬렉션 목록 조회
1) list_database.names(): DB 목록을 가져옴
2) list_collection_names(): Collection 목록을 가져옴
- 도큐먼트 조회
print(list(collection.find(
{query},
{projection}
)))
1) collection이름.find() 를 사용하여 컬렉션 내의 도큐먼트 조회가 가능하다.
2) list 명령어는 커서를 활용하여 모든 데이터를 불러온다.
- 커서란? 쿼리 결과에 대한 포인터로, 도큐먼트의 위치 정보를 반환
- Query와 Projection
Query: 원하는 정보를 검색하기 위해 표현하는 내용
Projection: 그 field를 보여줄지 말지를 결정 (true이면 보여주고, false면 안 보여줌)
user.find(
{"name" : "hayan"} # find함수 내에 찾고자하는 query 작성
)
위와 같이 작성한다면, name이 "hayan"인 Document가 모두 반환된다.
user.find(
{"name" : "hayan"} # find함수 내에 찾고자하는 query 작성
{"age" : False } # age의 projection 값을 False로 설정
)
위와 같이 작성한다면, name이 "hayan"인 사용자의 age 필드는 보여주지 않는다.
- 도큐먼트 수정
result = collection.update_many(
{ query },
{ update },
upsert:Boolean
)
print(result.matched_count) # 찾은 도큐먼트 수 출력
print(result.modified_count) # 변경된 도큐먼트 수 출력
collection이름.update_many() 를 사용하여 한 번에 여러 값을 수정할 수 있다.
user.update_one( # update_one은 하나의 쿼리 수정
{"name": "hayan"},
{"$set": {"age": 25} }
)
위 코드는 name이 hayan인 사용자의 나이를 25로 수정하는 것이다.
어떤 필드의 값을 수정하기 위해 update문을 작성할 때는
$set 연산자를 사용하여야 한다.
만약! 쿼리에 작성된 <"필드">:<"값">에 대한 document가 존재하지 않는다면,
새로 추가된다.
나중에 추가적으로 포스팅 하겠지만, 연산자 기본구조는
{"$연산자" : {"필드": 값}} 이다.
user.update_one( # update_one은 하나의 쿼리 수정
{"name": "hayan"},
{"$unset": {"age": True} }
)
위 코드는 name이 hayan인 사용자의 age 필드를 제거하는 것이다.
$unset 연산자를 사용하여 값은 True(제거)를 준다.
- 도큐먼트 삭제
result = collection.delete_one(
{ query }
)
print(result.deleted_count) # 삭제된 도큐먼트 수 출력
만약 다수의 도큐먼트를 삭제하고 싶으면 delete_many()를 사용하면 된다.
user.delete_one(
{"name" : "hayan"}
)
위 코드는 name 필드의 값이 hayan인 document를 삭제한다.
'Backend > MongoDB' 카테고리의 다른 글
Mongoose ODM 기초와 간단한 CRUD 구현 코드(Node.js) (0) | 2022.02.26 |
---|---|
MongoDB - 고급 활용 기능 이론 위주 (Flask, 집계, 인덱스, 복제 세트, Read-Concern/Write-Concern, 샤드 클러스터) (0) | 2022.02.02 |
MongoDB - 연산자 (0) | 2022.02.02 |
MongoDB 개요 (0) | 2022.02.01 |