2016-06-14 2 views
1

나는 '경쟁'테이블 rethinkdb 있습니다. 두 번째 수준에 나는 주자를 가지고 각 주자는 결과 목록이 있습니다RethinkDB,지도 및 필터를 사용하여 쿼리

"total_results": { 
    "433915": [ #runner_id 
    { 
     "judge": "15561671", 
     "result": 5, 
     "round": "1" 
    }, 
    { 
     "judge": "08136a59", 
     "result": 4, 
     "round": "1" 
    } 
    ] 
} 

내가 rethinkdb 쿼리를 수행 코드의

results = (r.table('competitions').filter(lambda c: c['unique_id'] == competition_id) 
    .map(lambda c: c['total_results']) 
    .map(lambda t: t[runner_id]) 
.run(conn)) 

이 작품은 잘 작동합니다. 이제 'round'값에 따라 필터를 적용하고 싶습니다. 내가 바로 결과 쿼리처럼 보이는, 그래서 두 번째의 .map() 이후에 추가 :

results = (r.table('competitions').filter(lambda c: c['unique_id'] == competition_id) 
    .map(lambda c: c['total_results']) 
    .map(lambda t: t[runner_id]) 
    .filter(lambda x: x['round'] == round) 
.run(conn)) 

하지만 빈 목록을 얻고있다.

by_round = filter(lambda x: x['round'] == round, results) 

나는 결과를 얻을 : 나는 rethinkdb 쿼리의 외부() .filter 이동 할 경우이 좋아하기 때문에 그리고 이것은 나를 위해 이상하다. 질문을 다시 생각하면서 내가 잘못하고있는 것이 있어야합니다 ... 팁을주세요.

p.s. 데이터베이스에 수천 개의 결과가 있습니다. 쿼리 매개 변수를 기반으로 수십 개의 결과가 있어야합니다.

답변

1

두 번째 mapconcat_map 인 것으로 알고 싶습니다. 기존 출력 형식이 마음에 들면 map.map(lambda x: x.filter(...))과 같이 넣을 수 있습니다.

+0

안녕하세요 @mlucy, 답장을 보내 주셔서 대단히 감사합니다. 네, 맞았습니다. 두 번째 맵을 concat_map으로 바꾸면 작업이 완료되었습니다. concatMap을 concat_map으로 바꾸시겠습니까 (파이썬 방식)? 나는 당신을 "받아 들여진"것으로 대답 할 것입니다. – Desprit