2012-06-04 2 views
0

Papers 컬렉션에 Paper 개의 문서가 있습니다. 각 Paper에는 Person 문서에 대한 하나의 DBRef가 있습니다. 그래서 Paper 문서에있는 사람의 속성은 올바른 Personpymongo : 참조로 쿼리하는 가장 좋은 방법은 무엇입니까?

사람

{'name' : 'Person A', 'slug' : 'PA'}, 
{'name' : 'Person B', 'slug' : 'PB'} 

에 DBRef 내가 A라는 사람을 참조하는 모든 서류를 반환하는 쿼리를 만드는 싶습니다 종이

{'name' : 'Paper 1', 'person': DBRef}, 
{'name' : 'Paper 2', 'person': DBRef}, 
{'name' : 'Paper 3', 'person': DBRef} 

입니다 (슬러그 == 'PA'). 쿼리에서 필터링을 시도하고 맵 축소 문에서 실패했습니다. pymongo에서 이것을 처리하는 가장 좋은 방법은 무엇입니까?

이 쿼리는

for paper in db['papers'].find({'person.slug' : 'PA'}): 
    print paper 

지도도 제로 내가 이런 식으로 작업을 수행 할 수있는 것처럼 그것은 보인다

mapper = Code(""" 
       function() { 
       if (this.person.slug == slug) { 
         emit (this, 1); 
         } 
       } 
    """) 

    reducer = Code(""" 
     function (key, values) { 
      return key; 
     } 
    """) 
    result = db['papers'].map_reduce(mapper, reducer, "myresults", scope={'slug' : 'PA'}) 
    for doc in result.find(): 
     print doc 
+1

질의, 하나는 Person A의'_id'를 얻는 것이고, 다른 하나는 그 ID를 참조하는 논문을 얻는 것입니다. – paulmelnikow

답변

1

결과를 돌려 줄 어떤 결과를 반환하지 않으며, 내가 사용할 수 없습니다 기타 속성

for paper in db['papers'].find({'person.$id' : person['_id']}):