01.MongoDB 기초 - pymongo 다루기(2)

ID짱재·2021년 2월 26일
4

MongoDB

목록 보기
5/8
post-thumbnail

🌈 pymongo 다루기

🔥 데이터 입력(Create)

🔥 데이터 검색(Read)

🔥 데이터 수정(Update)

🔥 데이터 삭제(Delete)

🔥 pymongo 연습


1. 데이터 입력(Create) - insert

  • pymongo 에서는 insert_one() 또는 insert_many()를 사용
    • robomongo에서는 insertOne() 또는 insertMany() 사용
  • 데이터 insert 방법 : [컬렉션객체].insert_one([JSON형식]) 또는 insert_many([JSON형식])
  • pymongo는 python에서 실행되기 때문에 key값에 무조건 쌍따옴표("") 넣어, JSON형식을 맞춰줘야함
  • insert_many()는 리스트형식으로 넣기 때문에 []로 JSON값을 감싸줘야함

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
post = {"author": "Mike", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
knowledge_it.insert_one(post) # 데이터 1개 삽입
post = [{ "author":"Dave Ahn", "age":25 }, { "author":"Dave", "age":35 }]
knowledge_it.insert_many(post) # 데이터 여러개 삽입

  • [컬렉션객체].estimated_document_count() 👈 데이터(document) 갯수 반환
  • [컬렉션객체].document_count({}))로 사용해도 됨
  • 데이터가 4개로 보이는 것은 위에 insert_one()이 한번더 중복 추가된 결과임
  • python의 문법을 사용해 list를 선언한 뒤, append() 함수로 데이터 삽입도 가능
    ✍🏻 python
import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
data = list() # 리스트 생성
data.append({'name' : 'aaron', 'age' : 20})
data.append({'name' : 'bob', 'age' : 30})
data.append({'name' : 'cathy', 'age' : 25})
data.append({'name' : 'david', 'age' : 27})
data.append({'name' : 'erick', 'age' : 28})
data.append({'name' : 'fox', 'age' : 32})
data.append({'name' : 'hmm'})
knowledge_it.insert_many(data)
print(knowledge_it.estimated_document_count()) 


2. 데이터 검색(Read) - find

  • find_one() 메서드는 첫번째로 일치하는 데이터(document)를 가져옴
  • [콜렉션 객체].find_one({조건})
  • 🔍 show_document = knowledge_it.find_one( {"author":"Dave"} )

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
show_document = knowledge_it.find_one( {"author":"Dave"} )
print(show_document)

  • find() 메서드는 일치하는 모든 데이터(document)를 가져옴
  • [콜렉션 객체].find()
  • 🔍 show_docs = knowledge_it.find() ⇢ show_docs 객체에 리스트로 담기기 때문에 for문으로 출력

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
show_docs = knowledge_it.find()
for show_doc in show_docs:
    print(show_doc)

  • 🔍 show_docs = knowledge_it.find( {"author":"Dave"} ) ⇢ {"author":"Dave"}와 일치하는 모든 데이터(document) 출력

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
show_docs = knowledge_it.find( {"author":"Dave"} )
for show_doc in show_docs:
    print(show_doc)

  • [컬렉션 객체].count_documents({ JSON형식 조건 }) 👈 JSON형식 조건에 맞는 갯수 반환

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
doc_count = knowledge_it.count_documents( {"age":25} )
print(doc_count)

  • sort() 메서드와 함게 쓰는 법 : 다수 데이터(document)를 지정된 key값을 기준으로 정렬해서 출력하고 싶을 때
  • [컬렉션 객체].find().sort([키값])
  • 🔍 knowledge_it.find().sort("age")

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
for post in knowledge_it.find().sort("age"):
    print(post)


3. 데이터 수정(Update) - update

  • update_one() : 조건에 첫번째로 해당하는 것을 수정
  • [컬렉션 객체].update_one( { [조건값] }, {"$set":{수정값}} )
  • $set에 쌍따옴표("") 해주는 것 주의
  • 또한 존재하지 않는 key값으로 Udate하면 해당 값을 추가시켜줌
  • 🔍 knowledge_it.update_one({"author":"Dave"}, {"$set":{"text":"Hi Dave"}})

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
knowledge_it.update_one({"author":"Dave"}, {"$set":{"text":"Hi Dave"}})
docs = knowledge_it.find({"author":"Dave"})
for doc in docs:
    print(doc)

  • update_many() : 조건에 해당되는 모든 것을 수정(없으면 생성)
  • [컬렉션 객체].update( { [조건값] }, {"$set":{수정값}} )
  • 🔍 knowledge_it.update_many( {"author": "Mike"}, {"$set": { "age": 30}})
  • Mike는 2개 document에 해당되며, age라는 key값이 없어 추가됨

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
knowledge_it.update_many( {"author": "Mike"}, {"$set": { "age": 30}})
docs = knowledge_it.find({"author":"Mike"})
for doc in docs:
    print(doc)


4. 데이터 삭제(Delete) - drop

  • delete_one() : 조건에 해당하는 첫번째 데이터(document)를 삭제
  • [컬렉션 객체].delete_one({조건})
  • 🔍 knowledge_it.delete_one( {"name":"bob"} )

✍🏻 python - 삭제 전

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
knowledge_it.update_one({"name":"cathy"},{"$set":{"name":"bob"}})
docs = knowledge_it.find( {"name":"bob"} )
for doc in docs:
    print(doc)

✍🏻 python - 삭제 후

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
knowledge_it.delete_one( {"name":"bob"} )
docs = knowledge_it.find( {"name":"bob"} )
for doc in docs:
    print(doc)

  • delete_many() : 조건에 해당하는 모든 데이터(document)를 삭제
  • [컬렉션 객체].delete_many({조건})
  • 🔍 knowledge_it.delete_many( {"name":"bob"} )

✍🏻 python

import pymongo
conn = pymongo.MongoClient() # localhost:20717로 연결
db = conn.knowledge # knowledge라는 DB가 없으면 생성, 있으면 지정
knowledge_it = db.it # it 이름으로 collection 생성
knowledge_it.delete_many( {"name":"bob"} )
count_doc = knowledge_it.count_documents( {"name":"bob"} )
print(count_doc)


5. pymongo 연습

  • 1단계 : DB 연결
  • 2단계 : DB 및 collection 생성
  • 3단계 : 데이터(document) 삽입

✍🏻 python

# pymongo 연결 및 database 및 collection 생성
import pymongo
conn = pymongo.MongoClient()
db = conn.books 
it_book = db.it_book
# 데이터(document) 삽입
data = list()
for index in range(100):
    data.append({"author":"jaewon", "publisher":"easypublishing", "number":index})
it_book.insert_many(data)
count_doc = it_book.count_documents({}) # 생성된 데이터 갯수 확인
print(count_doc)

  • 4단계 : 데이터(document) 읽기

✍🏻 python

# pymongo 연결 및 database 및 collection 생성
import pymongo
conn = pymongo.MongoClient()
db = conn.books 
it_book = db.it_book
# 데이터(document) 읽기
docs = it_book.find()
for doc in docs:
    print(doc)

  • 5단계 : 데이터(document) 수정
  • 조건 : 모든 데이터의 publisher를 condingbook으로 수정 후 갯수 출력

✍🏻 python

# pymongo 연결 및 database 및 collection 생성
import pymongo
conn = pymongo.MongoClient()
db = conn.books 
it_book = db.it_book
# 데이터(document) 수정
it_book.update_many({},{"$set":{"publisher":"codingbook"}})
count_docs = it_book.count_documents({"publisher":"codingbook"})
print(count_docs)

  • 6단계 : 데이터(document) 삭제
  • 조건 : number가 6이상인 doc삭제

✍🏻 python

# pymongo 연결 및 database 및 collection 생성
import pymongo
conn = pymongo.MongoClient()
db = conn.books 
it_book = db.it_book
# 데이터(document) 삭제
it_book.delete_many( { "number": { "$gte": 6} } )

profile
Keep Going, Keep Coding!

1개의 댓글

comment-user-thumbnail
2021년 12월 2일

짱재님 검색을 통해 블로그를 들어오게 되었네요~~ ㅎㅎㅎ 자세한 설명 good!👍

답글 달기