인프런 커뮤니티 질문&답변

윤성원님의 프로필 이미지

작성한 질문수

처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)

-------------------------------------------------

JSON파일 내에서 검색하는 법 질문이 있어요.

작성

·

539

0

제가 사용하려는 JSON파일을 파이썬에서

.keys()해보면

dict_keys(['gameId', 'platformId', 'gameCreation', 'gameDuration', 'queueId', 'mapId', 'seasonId', 'gameVersion', 'gameMode', 'gameType', 'teams', 'participants', 'participantIdentities'])

키값이 이렇게 되있습니다.

(롤 게임 api데이터입니다.)

강의에서 배운 내용을 활용한다면

maps = it.find({'mapId' : 11})

for map in maps:

print(map)

이런식으로 하면 it라는 콜렉션에 있는 것 다큐먼트들 중에

mapId가 11인 것들을 하나씩 프린트 하는 거 같습니다.

여기까지는 알겠는데 제가 궁금한건 저거로는 원하는 값을 검색하기가 어렵습니다.

가령 'participantIdentities'에는

{}안에 {}가 10개가 있습니다.

그니까 위에 mapId는 

mapid : 11

이런식으로 한칸??한줄로 되있는데

participantIdentities는

{

{}, {} , {}, {}, {}.....

}

이런식으로 10개가 있습니다.

(게임하는 사람이 10명이라서요)

그리고 그 안의 {}마다

'summonerName' : 금똥왁왁

이런식으로 제가 찾으려는 정보들이 있습니다.

다시 정리하자면

'mapId' : 11

인데반해,

'participantIdentities' :

{

{'summonerName' : 금똥왁왁}, {'summonerName' : 페이커}, {'summonerName' : 데프트}........

}

이런식으로 구성되어 있습니다.

이때 제가 summonerName이 데프트인 파일들을 검색하려면 어떤식으로 쿼리를 짜야하나요????

smName = it.find({'participantIdentities.summonerName' : '데프트'})

이런식으로 짜니까

IOudata limit 이런 에러가 떠서 안되구요.

smName = it.find({'participantIdentities.0.summonerName' : '데프트'})

로 짤 경우에는

participantIdentities에 10개의 칸이 있는데 그 중에 0번째 칸에 소환사 이름이 데프트인 경우만 나오는 거 같아요.

이런 경우에는 for문을 써서

0부터 9까지 반복문써야 하는건가요???

또 이런 경우에

smName = it.find({'participantIdentities.0.summonerName' : '데프트'}, { 'summonerName' : 1 } )

이거나

smName = it.find({'participantIdentities.0.summonerName' : '데프트'}, { 'participantIdentities.0.summonerName' : '데프트'summonerName' : 1 } )

이런식으로 하면 오류가 뜨던데

'participantIdentities' : {} {} {}{]

이런식으로 출력 되버리던데.....

저 쿼리를 실행했을 때 소환사 이름이 데프트만 나오게 하려면

뒤쪽 projection?부분을 어떻게 해줘야 하나요??

혼자 독학하려고 하는데 너무어려운거 같아요....

답변 1

0

윤성원님의 프로필 이미지
윤성원
질문자

summonerName : 데프트

'participantIdentities.0이든

'participantIdentities.1이든

'participantIdentities.9에 있든간에

다찾아올 수 잇는 방법이

반복문말곤 없나요?