MongoDB = 데이터베이스, 데이터를 쌓아두는 것 하지만, 내 눈에 보이지 않게 돌아가는 형태
Robo3T = MongoDB의 데이터를 시각화해서 우리 눈으로 볼 수 있게 해주는 것
DB의 방법은 두가지.
1. RDBMS(SQL) 차곡차곡 규칙을 가지고 쌓는 형태 ex)MS-SQL, My-SQL 등
2. No-SQL 딕셔너리 형태로 데이터를 저장하는 DB SQL에 비해서 비정형화 되어져있음 ex) MongoDB
일단 2번, No-SQL 형태를 MongoDB를 이용해 연습해보자
//pymongo를 쓰겠다.
from pymongo import MongoClient
//내 컴퓨터에서 쓰고 있는 MongoDB에 접속하겠다.
client = MongoClient('localhost', 27017)
//dbsparta라는 이름으로 db에 접속하겠다
db = client.dbsparta
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
-> doc이라는 딕셔너리를 users라는 콜렉션에 인서트 해라.
딕셔너리를 쌓는 No-SQL이라고 해도 어느정도 구분짓기 위해서 콜렉션이라는 정리의 개념을 가짐.
위와 같이 적고 run을 돌린 다음 robo 3T에서 확인해보자.
서버 왼쪽 클릭- Refresh를 하면
이런 식으로 딕셔너리가 런을 돌릴때마다 한 개씩 추가되는 것을 볼 수 있다.
same_ages = list(db.users.find({'age':21},{'_id':False}))
print(same_ages)
[{'name': 'bobby', 'age': 21}, {'name': 'jane', 'age': 21}]
bobby,jane의 동일은 age 값을 찾아줌
{'age':21}이 조건/{'_id':False}은 _id 값은 나타내지 말라는 코드
조건없이 쓰고 싶을 때는 {}의 형태로 빈 중괄호를 쓰면 된다.
same_ages = list(db.users.find({},{'_id':False}))
반복문을 활용해 출력하게 하는 방법도 있다.
same_ages = list(db.users.find({'age':21},{'_id':False}))
for person in same_ages:
print(person)
{'name': 'bobby', 'age': 21}
{'name': 'jane', 'age': 21}
find를 쓸 때 1가지만을 출력하는 방법
user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user)
{'name': 'bobby', 'age': 21}
이미 쓰여진 한 개의 딕셔너리를 업데이트/변경 하고 싶을 때
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
이름이 bobby인 모든 딕셔너리의 age 값을 19로 변경해라-> 상당히 위험할 수 있음
때문에 주로 update_one을 사용한다.
db.users.update_many({'name':'bobby'},{'$set':{'age':19}})
이름이 bobby인 애를 한 개 찾아서 삭제해라
db.users.delete_one({'name':'bobby'})
이름이 bobby인 애를 모두 찾아서 삭제해라
db.users.delete_many({'name':'bobby'})
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})