파이썬으로 mongoDB 제어하기 - pymongo 라이브러리

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

5. 파이썬으로 mongoDB 제어하기 - pymongo 라이브러리

mongodb with EC2 Connection via using pymongo (코드 실행 실습)

In [ ]:
import pymongo

5.1. 연결하기

In [ ]:
# connection = pymongo.MongoClient(mongo_server, 27017)
In [ ]:
username = 'davelee'
password = 'korea123'
connection = pymongo.MongoClient('mongodb://%s:%s@www.funcoding.xyz' % (username, password))
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다

5.2. test Database 사용하기 (없으면 만들어진다.)

In [ ]:
db = connection.test
In [ ]:
db = connection["test"]   # 이렇게도 가능하다.
In [ ]:
print(db)
In [ ]:
print(dir(db))
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
print(db.name)

5.3. test_collection 이라는 collection 사용하기 (없으면 만들어진다.)

In [ ]:
test_collection = db.test_collection
In [ ]:
test_collection = db["test_collection"]
In [ ]:
test_collection
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다

5.4. Document INSERT 하기 ( insert_one() 과 insert_many() )

  • insert_one()
In [ ]:
post = {"author": "Mike", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
In [ ]:
test_collection.insert_one(post)
  • Document INSERT 하면, _id (primary key)를 확인하는 방법
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
post = {"author": "Dave", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
In [ ]:
post_id = test_collection.insert_one(post).inserted_id
In [ ]:
post_id
  • insert_many()
    • count() 메서드는 컬렉션 객체와 함께 쓰여서 총 Document 수를 알려줌
In [ ]:
test_collection.count()    
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
result = test_collection.insert_many(
    [
        {'number': i} for i in range(10)
    ]
)
In [ ]:
test_collection.count()
  • list와 dictionary 를 활용하여 insert 하기
In [ ]:
test_insert_collection = db.test_insert  # collection 만들기가 매우 편합니다.
In [ ]:
# 리스트, 객체 삽입 가능
test_insert_collection.insert_one({'title' : '암살', 'castings' : ['이정재', '전지현', '하정우']})
test_insert_collection.insert_one({'title' : '실미도', 'castings' : ['설경구', '안성기'], 
                              'datetime' : {'year' : '2003', 'month' : 3,
                                           'val' : {'a' :{'b' : 1}}}})
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
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'})

test_insert_collection.insert_many(data)
In [ ]:
for result in test_insert_collection.find():
    print(result)
In [ ]:
data = test_insert_collection.find()
In [ ]:
data
In [ ]:
data_dict = list()
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
for dat in data:
    print(type(dat))

5.5. Document 검색 하기(읽기) ( find_one() 과 find() )

  • find_one() 메서드 : 가장 빨리 검색되는 하나 검색하기
In [ ]:
test_collection.find_one()
In [ ]:
test_collection.find_one( {"author":"Dave"} )
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
  • find_one( 안에 조건을 넣을 때는 사전 형식으로 해야 합니다. { 키:값 } )
  • find() 메서드 : 검색되는 모든 Document 읽어오기
In [ ]:
docs = test_collection.find()
In [ ]:
for doc in docs:
    print(doc)
In [ ]:
docs = test_collection.find( {"author":"Dave"} )
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
for doc in docs:
    print(doc)
  • count() 와 함께 쓰기
In [ ]:
test_collection.find({"author": "Mike"}).count()
  • sort() 와 함께 쓰기
In [ ]:
for post in test_collection.find({"author":"Mike"}).sort("_id"):
    print(post)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다

5.6. Document Update 하기 (update_one() 과 update_many())

  • update_one() : 가장 먼저 검색되는 한 Document만 수정하기
In [ ]:
test_collection.find_one( {"author":"Dave"} )
In [ ]:
test_collection.update_one(
    { "author" : "Dave" }, 
    { "$set" : 
        { "text" : "My second blog post!" }
    }
)
In [ ]:
docs = test_collection.find( {"author":"Dave"} )
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
for doc in docs:
    print(doc)
  • update_many() : 조건에 맞는 모든 Document 수정하기
In [ ]:
test_collection.update_many({"author": "Dave"}, {"$set": {"text": "My second blog post!"}})
In [ ]:
docs = test_collection.find( {"author":"Dave"} )
In [ ]:
for doc in docs:
    print(doc)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다

5.7. Document 삭제 하기 (delete_one() 과 delete_many())

  • delete_one() 메서드 : 가장 먼저 검색되는 한 Document만 삭제하기
In [ ]:
docs = test_collection.find( {"author":"Mike"} )
In [ ]:
for doc in docs:
    print(doc)
In [ ]:
test_collection.delete_one( {"author":"Mike"} )
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
docs = test_collection.find( {"author":"Mike"} )
In [ ]:
for doc in docs:
    print(doc)
  • delete_many() 메서드 : 조건에 맞는 모든 Document 삭제하기
In [ ]:
test_collection.delete_many( {"author":"Mike"} )
In [ ]:
test_collection.find( {"author":"Mike"} ).count()
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
from pandas import Series, DataFrame

raw_data = {'col0': [1, 2, 3, 4],
            'col1': [10, 20, 30, 40],
            'col2': [100, 200, 300, 400]}

data = DataFrame(raw_data)
In [ ]:
data
In [ ]:
data_array = data['col1'].as_matrix()
In [ ]:
data_array.size
In [ ]:
test_collection.find().count()
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [ ]:
for doc in test_collection.find():
    print(doc)
실습
number 가 6 이상(>=)인 doc 삭제하기
In [ ]:
test_collection.delete_many( {"number": { "$gt": 5 } } )
In [ ]:
for doc in test_collection.find():
    print(doc)