20.04.09(Tue) pymongo로 MongoDB 제어하기(2), Robo3T 소개

.·2020년 4월 9일
0

스파르타코딩클럽

목록 보기
14/14

1. pymongo로 MongoDB 제어하기

1-1. find_one() 으로 특정 결과 값만을 뽑아보기

from pymongo import MongoClient          
client = MongoClient('localhost', 27017)  
db = client.dbteddyjung                   

user = db.users.find_one({'name':'bobby'})
print(user)

# 그 중 특정 키 값을 빼고 보기
user = db.users.find_one({'name':'bobby'},{'_id':0})
print(user)

앞전에 데이터들을 db 에 넣어주었기 때문에 이제 특정 결과 값만 확인해보자.

find_one({'name':'bobby'}) 'name' 이 'bobby' 인 값의 결과를 다 가져와 라는 뜻.

# 아래 창 확인
{'_id': ObjectId('5e8e93cd627323eb47ed7a69'), 'name': 'bobby', 'age': 21}

1-2. find_one() 으로 특정 결과 값을 빼고 보기

{'_id': ObjectId('5e8e93cd627323eb47ed7a69'), 'name': 'bobby', 'age': 21}

보니까 결과 값에 id 가 나온다. id 가 출력되는 이유는 db에 데이터를 저장하면서 중복되어 저장되는 데이터가 있을 때, 데이터에 랜덤으로 다르게 부여되는 id 를 통해 컴퓨터가 데이터를 구별하는 것이 가능하게 된다.

user = db.users.find_one({'name':'bobby'},{'_id':0})
# {'_id':0} 또는 {'_id':False} 로 할 수 있다.
print(user)

# 결과
{'name': 'bobby', 'age': 21}

마찬가지로 'age' 를 빼고 볼 수도 있겠지. 근데 두 값 이상을 빼고 볼 방법은 없을까?

user = db.users.find_one({'name':'badguy'},{'_id':0, 'age':False})
print(user)

1-3. find()

all_users = list(db.users.find())

find() : 괄호안이 없다. 전부 다 찾아줘. users 안에 있는 모든 정보를 다 꺼내와라. 그래서 그것을 목록화 list 화 해줘. 배열화(순서가 중요한 자료형) 해줘.
그거를 all_users 라 하자.

all_users 를 선언했으니 반복문을 통해 user 하나씩 차례대로 다 뽑아보자.

all_users = list(db.users.find())
for user in all_users:
    print(user)

결과

{'_id': ObjectId('5e8e93cd627323eb47ed7a69'), 'name': 'bobby', 'age': 21}
{'_id': ObjectId('5e8e93cd627323eb47ed7a6a'), 'name': 'kay', 'age': 27}
{'_id': ObjectId('5e8e93cd627323eb47ed7a6b'), 'name': 'john', 'age': 30}
{'_id': ObjectId('5e8e93dfddb05d0ff805e3e6'), 'name': 'bobby', 'age': 21}
{'_id': ObjectId('5e8e93dfddb05d0ff805e3e7'), 'name': 'kay', 'age': 27}
{'_id': ObjectId('5e8e93dfddb05d0ff805e3e8'), 'name': 'john', 'age': 30}

Process finished with exit code 0

1-4. 수정하기. update()

바로 위 코드를 보고서 문득 bobby 의 나이가 잘못 저장되었다고 느낀다. 전부 지금 6개 출력되고 있는데 어떻게 해야 일괄적으로 다 바꿀 수 있을까?
지금까지 insert, find, find_one 을 써봤었다. find() 는 모든 db 데이터를 다 찾아주는 거였고, find_one({}) 는 특정 조건을 찾아라 라는 뜻이였다.

이번에는 bobby 의 나이를 50 으로 일괄 수정하기 위해 update 를 쓰자

update 의 구성은,

db.users.update_one({})
db.users.update_many({})

일괄 수정을 위해서는 update_many 를 사용한다.

# 생김새
# db.people.update_many(찾을조건,{ '$set': 어떻게바꿀지 })
all_users = list(db.users.find())
db.users.update_many({'name':'badguy'},{'$set':{'age':20}})

for user in all_users:
    print(user)


# 결과
{'_id': ObjectId('5e8ebc28cd89ce2d00f4ee81'), 'name': 'teddyjung', 'age': 33}
{'_id': ObjectId('5e8ebc28cd89ce2d00f4ee82'), 'name': 'badguy', 'age': 20}
{'_id': ObjectId('5e8ebc2e29be54591089b826'), 'name': 'teddyjung', 'age': 33}
{'_id': ObjectId('5e8ebc2e29be54591089b827'), 'name': 'badguy', 'age': 20}
{'_id': ObjectId('5e8ebc328e4b365b42857d84'), 'name': 'teddyjung', 'age': 33}
{'_id': ObjectId('5e8ebc328e4b365b42857d85'), 'name': 'badguy', 'age': 20}

1-5. 삭제하기. delete

update 와 방법이 같다. 잘 사용하지 않는다고 한다.

db.users.delete_one({'name':'bobby'})

all_user = list(db.users.find())
for user in all_user:
    print(user)
    
# 결과
{'_id': ObjectId('5e8e93cd627323eb47ed7a6a'), 'name': 'kay', 'age': 27}
{'_id': ObjectId('5e8e93cd627323eb47ed7a6b'), 'name': 'john', 'age': 30}
{'_id': ObjectId('5e8e93dfddb05d0ff805e3e7'), 'name': 'kay', 'age': 27}
{'_id': ObjectId('5e8e93dfddb05d0ff805e3e8'), 'name': 'john', 'age': 30}

Process finished with exit code 0

실행을 두번 하니 두개 있던 바비가 사라졌다. 한번에 하는 뭔가가 있을거 같긴한데 아직은 욕심내지말아야겟다..

2. Robo3T

근데 데이터를 볼 때 항상 인쇄를 해서 봐야 하나?
Robo3T 를 하면 확인이 가능하다.

profile
.

0개의 댓글