본문 바로가기

DB/MongoDB

[MongoDB] 19. 파이썬과 MongoDB 연동

728x90
반응형

파이썬과 MongoDB를 연동

  • MongoDB 연동을 위한 라이브러리 "pymongo" 설치
// 터미널에서 실행
pip install pymongo

  • MongoDB 연결
    • 27017 포트 사용
import pymongo as mg

# 몽고 디비 연결
conn = mg.MongoClient("mongodb://localhost:27017")
  • 데이터 베이스 선택
# Database 선택
db = conn['testDB']
  • 컬렉션 선택
# Collection 선택
rating = db['rating']
  • 질의 수행
# 질의1 - insertOne
doc = {"test":"Python을 통해 삽입한 문서"}
x = col.insert_one(doc)
print("Object_id :",x.inserted_id)

# 질의2 - insertMany
doc1 = {"test1":"Python을 통해 삽입한 문서1"}
doc2 = {"test2":"Python을 통해 삽입한 문서2"}
doc3 = {"test3":"Python을 통해 삽입한 문서3"}
x = col.insert_many([doc1,doc2,doc3])
print("Object_ids :",x.inserted_id)

 

# 질의3 - find_one()
result = col.find_one()
print(result)

# 질의4 - find()
for idx,r in enumerate(col.find()):
    print(f"{idx+1} -",r)

# 질의5 - find() 조건의 질의
rating = db['rating']
for r in rating.find({},{"_id":0,"user_id":1}):
    print(r)

# 질의6 - aggregate 
text = db['text']
pipeline = [{"$project":{"upper":{"$toUpper":"$text1"}}}]
for r in text.aggregate(pipeline):
    print(r)

 

MongoDB 활용 모듈 만들기

import pymongo as mg

class MOGO:
    def __init__(self,db,col):
        self.__conn = mg.MongoClient("mongodb://localhost:27017")
        self.__db = self.__conn[db]
        self.__col = self.__db[col]
    def change_db(self,db):
        self.__db = self.__conn[db]
    def change_col(self,col):
        self.__col = self.__db[col]
    def DB(self):
        return self.__db
    def COL(self):
        return self.__col
    def insertOne(self,doc):
        x = self.__col.insert_one(doc)
        return x
    def insertMany(self,docs):
        x = self.__col.insert_many(docs)
        return x
    def find(self, query={}, projection={}):
        return self.__col.find(query,projection)
    def aggregation(self,stages):
        return self.__col.aggregate(stages)
from mongo import MOGO

mg = MOGO("testDB","rating")

for i in mg.find({},{"_id":0,"_rating":1,"user_id":1}):
    print(i)

mg.change_col("text")
for i in mg.aggregation([{"$project":{"Lower":{"$toLower":"$text2"}}}]):
    print(i)

728x90
반응형