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

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

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

import pymongo

5.1. 연결하기

# connection = pymongo.MongoClient(mongo_server, 27017)
username = 'davelee'
password = 'korea123'
connection = pymongo.MongoClient('mongodb://%s:%s@www.funcoding.xyz' % (username, password))

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

db = connection.test
db = connection["test"]   # 이렇게도 가능하다.
print(db)
print(dir(db))
print(db.name)

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

test_collection = db.test_collection
test_collection = db["test_collection"]
test_collection

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

  • insert_one()
post = {"author": "Mike", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
test_collection.insert_one(post)
  • Document INSERT 하면, _id (primary key)를 확인하는 방법
post = {"author": "Dave", "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"] }
post_id = test_collection.insert_one(post).inserted_id
post_id
  • insert_many()
    • count() 메서드는 컬렉션 객체와 함께 쓰여서 총 Document 수를 알려줌
test_collection.count()    
result = test_collection.insert_many(
    [
        {'number': i} for i in range(10)
    ]
)
test_collection.count()
  • list와 dictionary 를 활용하여 insert 하기
test_insert_collection = db.test_insert  # collection 만들기가 매우 편합니다.
# 리스트, 객체 삽입 가능
test_insert_collection.insert_one({'title' : '암살', 'castings' : ['이정재', '전지현', '하정우']})
test_insert_collection.insert_one({'title' : '실미도', 'castings' : ['설경구', '안성기'], 
                              'datetime' : {'year' : '2003', 'month' : 3,
                                           'val' : {'a' :{'b' : 1}}}})
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)
for result in test_insert_collection.find():
    print(result)
data = test_insert_collection.find()
data
data_dict = list()
for dat in data:
    print(type(dat))

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

  • find_one() 메서드 : 가장 빨리 검색되는 하나 검색하기
test_collection.find_one()
test_collection.find_one( {"author":"Dave"} )
  • find_one( 안에 조건을 넣을 때는 사전 형식으로 해야 합니다. { 키:값 } )
  • find() 메서드 : 검색되는 모든 Document 읽어오기
docs = test_collection.find()
for doc in docs:
    print(doc)
docs = test_collection.find( {"author":"Dave"} )
for doc in docs:
    print(doc)
  • count() 와 함께 쓰기
test_collection.find({"author": "Mike"}).count()
  • sort() 와 함께 쓰기
for post in test_collection.find({"author":"Mike"}).sort("_id"):
    print(post)

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

  • update_one() : 가장 먼저 검색되는 한 Document만 수정하기
test_collection.find_one( {"author":"Dave"} )
test_collection.update_one(
    { "author" : "Dave" }, 
    { "$set" : 
        { "text" : "My second blog post!" }
    }
)
docs = test_collection.find( {"author":"Dave"} )
for doc in docs:
    print(doc)
  • update_many() : 조건에 맞는 모든 Document 수정하기
test_collection.update_many({"author": "Dave"}, {"$set": {"text": "My second blog post!"}})
docs = test_collection.find( {"author":"Dave"} )
for doc in docs:
    print(doc)

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

  • delete_one() 메서드 : 가장 먼저 검색되는 한 Document만 삭제하기
docs = test_collection.find( {"author":"Mike"} )
for doc in docs:
    print(doc)
test_collection.delete_one( {"author":"Mike"} )
docs = test_collection.find( {"author":"Mike"} )
for doc in docs:
    print(doc)
  • delete_many() 메서드 : 조건에 맞는 모든 Document 삭제하기
test_collection.delete_many( {"author":"Mike"} )
test_collection.find( {"author":"Mike"} ).count()
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)
data
data_array = data['col1'].as_matrix()
data_array.size
test_collection.find().count()
for doc in test_collection.find():
    print(doc)
실습
number 가 6 이상(>=)인 doc 삭제하기
test_collection.delete_many( {"number": { "$gt": 5 } } )
for doc in test_collection.find():
    print(doc)