Spicy Tuna Sushi
본문 바로가기
정보

Python과 몽고DB 연결 및 조회하기, 값 추출하기

by 말린malin 2022. 9. 4.

 

 

1. pymongo 활용하여 몽고DB와 연결하기

from pymongo import MongoClient
client = MongoClient(host='localhost', port=27017)

db = client['test1'] #test1=DB명
res = db.Restaurants #Restaurants=Collection명

 

2. 탐색 시 조건 설정 및 결과 확인하기

sql의 where 문에 해당한다고 보면 될 것 같다.

insert했던 데이터에 맞게 find로 원하는 조건에 맞춰 여러 쿼리를 적어봤다.

pprint로 예쁘게 확인한다.

import pprint
pprint.pprint(res.find_one({'Tag':'아동급식카드'}))
pprint.pprint(res.find_one({'FoodType':'한식'}))
pprint.pprint(res.find_one({'Location': { '$regex': '서초'}}))
pprint.pprint(res.find_one({'Tag':'아동급식카드','FoodType': '한식','Location': { '$regex': '강남' }}))

 

3. 데이터 랜덤 조회하기

 

먼저 원하는 조건이 있다면 match로 넣어주면 된다.

sample size에 원하는 랜덤 데이터 수를 넣으면 된다.

나는 다섯 가지 데이터를 확인하고 싶으므로 5로 설정했다.

반복문으로 확인한다.

random=res.aggregate([
    { "$match": { 'Tag':'아동급식카드'  } },
    { "$sample": { "size": 5 } }
])
for x in random:
     print(x)

 

4. value 추출

반환되는 데이터의 value로 새로운 응답문을 만들 것이므로,

각각의 변수에 넣어주기 위하여 get으로 값을 추출한다.

# 조건에 해당하는 데이터 하나 확인
find=res.find_one({'Tag':'채식','FoodType': '한식','Location': { '$regex': '강남' }})
# 딕셔너리 value 추출
Tag=find.get('Tag')
FoodType=find.get('FoodType')
Location=find.get('Location')
Name=find.get('Name')
Phone=find.get('Phone')
print(Tag,FoodType,Location,Name,Phone)

find_one으로 하나의 데이터만 가져와서 각각의 변수에 value를 넣었다.

만약 여러 데이터라면 배열에 차례차례 넣어주면 될 것이다.

 

전체 코드

from pymongo import MongoClient
client = MongoClient(host='localhost', port=27017)

db = client['test1'] #test1=DB명
res = db.Restaurants #Restaurants=Collection명

#탐색시 조건 설정 및 결과 확인하기
# import pprint
# pprint.pprint(res.find_one({'Tag':'아동급식카드'}))
# pprint.pprint(res.find_one({'FoodType':'한식'}))
# pprint.pprint(res.find_one({'Location': { '$regex': '서초'}}))
# pprint.pprint(res.find_one({'Tag':'아동급식카드','FoodType': '한식','Location': { '$regex': '강남' }}))

#아동급식카드 식당 다섯 개 랜덤으로
random=res.aggregate([
    { "$match": { 'Tag':'아동급식카드'  } },
    { "$sample": { "size": 5 } }
])
for x in random:
     print(x)

# 조건에 해당하는 데이터 하나 확인
find=res.find_one({'Tag':'채식','FoodType': '한식','Location': { '$regex': '강남' }})
# 딕셔너리 value 추출
Tag=find.get('Tag')
FoodType=find.get('FoodType')
Location=find.get('Location')
Name=find.get('Name')
Phone=find.get('Phone')
print(Tag,FoodType,Location,Name,Phone)

# 조건에 해당하는 데이터 모두 탐색
# searched=res.find({'Tag':'채식','FoodType': '한식','Location': { '$regex': '강남' }})
# for x in searched:
#     print(x)

댓글