파이썬에서 몽고db를 사용하기 위해서는 라이브러리 설치가 필요합니다.
pip install pymongo
라이브러리 설치가 완료되었으면 간단한 형태의 딕셔너리형 자료를 추가해봅니다.
참고로 몽고db에 인서트 시키는 자료는 dict 형 이어야 합니다. (리스트 안의 dict는 가능)
삽입(insert)
import pymongo
#접속된 객체를 conn으로 받는다
conn = pymongo.MongoClient("localhost", 27017)
#test 데이터베이스가 없으면 자동으로 생성됩니다.
db = conn.test
#컬렉션은 테이블같은 개념. sql에서는 table , mongodb는 컬렉션.
#members 컬렉션 없을 경우 생성됨.
col = db.members
people = {
"이름" : "홍길동",
"나이" :30,
"별명" : "의적"
}
# 정보 삽입 (반복해서 수행할 경우 같은 정보가 계속 인서트 됩니다.)
col.insert(people)
위의 과정을 수행하면 people 정보가 삽입됩니다. 고유한 id값은 몽고db에서 자동적으로 생성됩니다.
검색(find)
#전체검색
result = col.find()
for r in result:
print(r)
#특정조건검색 / 이름이 홍길동인 것을 모두 가져옴
result = col.find({"이름":"홍길동"})
for r in result:
print(r)
#특정조건검색 / 이름이 홍길동이면서 나이가 30인 결과를 모두 가져옴 (and)
result = col.find({"이름":"홍길동","나이":30})
for r in result:
print(r)
#특정조건검색 / 이름이 홍길동이거나 나이가 30이거나 결과를 모두 가져옴 (or)
result = col.find({"$or" : [ {"이름":"홍길동"} , {"나이":30} ] } )
for r in result:
print(r)
#결과의 맨 위의 값 하나만 가져옴
result = col.find_one({"이름":"홍길동"})
print(result)
# 나이가 40보다 큰 사람을 찾음
result = col.find({"나이": {"$gt" : 40} }) #$gte = 크거나 같거나 (40도 포함됨)
for r in result :
print(r)
#나이가 40보다 크고 50보다 작은 경우
result = col.find({"나이": {"$gt" : 40, "$lt": 50} }) #$lte = 작거나 같거나 (50도 포함됨)
for r in result :
print(r)
#나이가 40보다 크고 50보다 작은 데이터의 나이만 보고 싶을때
result = col.find({"나이": {"$gt" : 40, "$lte": 50}},{"나이":True})
for r in result:
print(r)
#나이가 40보다 크고 50보다 작거나 같은 데이터의 나이만 보고 싶을때 /단 id는 미출력
result = col.find({"나이": {"$gt" : 40, "$lte": 50}},{"_id":False, "나이":True})
for r in result:
print(r)
#limit(4) 결과를 4개만 보겠다.
result = col.find().limit(4)
for r in result:
print(r)
#skip(1) 첫 1개의 데이터는 보지 않는다.
result = col.find().skip(1).limit(4)
for r in result:
print(r)
업데이트(update)
#아래와 같은 쿼리는 이름이 바뀌나 나이, 별명 등의 정보는 사라지기때문에 주의해야함.
col.update({"이름":"홍길동"}, {"이름":"유길동"})
# 홍길동을 찾아 주길동으로 바꿔라. 맨 위에 있는 데이터만 수정됨.
col.update({"이름":"홍길동"}, {"$set":{"이름" :"주길동"}})
# 모든 홍길동의 성적을 A라 바꿔라.
col.updateMany({"이름" :"홍길동"},{$set : {"성적":"A"}})
업데이트시 주의사항은 위의 경우에서 보면
$set을 붙이지 않을 경우 이름이 바뀌면서 다른 정보(나이, 별명)는 사라지게 됩니다. 따라서 이름만 바꾸고 싶을 경우에는 아래와 같이 작성해야 합니다.
col.update({"이름":"홍길동"}, {"$set":{"이름" :"주길동"}})
업서트(upsert)
#이름 정길동을 찾아 별명을 의적으로 수정해라. 단 정길동이 없으면 생성 (upsert = update+insert)
col.update({"이름":"정길동"}, {"$set":{"별명" :"의적"}},upsert =True, multi = True)
upsert 는 해당 정보를 찾아 업데이트를 하게되는데 만약 "정길동" 이 없다면 새롭게 생성됩니다.
여기서 별명또한 함께 생성됩니다. ({"이름":"정길동"}, {"별명" :"의적"} )
삭제-1 (remove)
#이름이 정길동인 데이터를 모두 삭제한다.
col.remove({"이름":"정길동"})
#데이터가 전체 삭제됨. 주의해야함
col.remove({})
remove 사용시 주의점은 의도치 않게 모든 데이터를 삭제시킬 수 있다는 점입니다. 나도 모르게 파일을 실행시켜버리면 모든 데이터가 날아가게되죠. 그래서 대안으로 사용할 수 있는 것이 delete 입니다.
삭제-2 (delete)
#데이터삭제_2 - delete_one 하나만 삭제
col.delete_one({"이름":"주길동"})
#delete_many 전체삭제
col.delete_many({"이름":"남길동"})
delete를 사용하면 의도치않게 모든 데이터를 삭제하는 실수를 방지할 수 있습니다.
반응형
'DB > mongoDB' 카테고리의 다른 글
[mongodb] pymongo element 갯수 쿼리 (0) | 2020.12.04 |
---|---|
mongodb atlas 사용시 필요한 라이브러리 (0) | 2020.11.29 |
몽고db 정말 잘 정리된 블로그 (0) | 2020.11.12 |
pymongo array 접근 수정하는 법. (0) | 2020.08.05 |
몽고db 비교문법 정리 (0) | 2020.07.03 |