pymongo: лучший способ сделать запрос по ссылке?

У меня есть куча Paper документов в коллекции Papers. Каждый Paper имеет одну ссылку DBRef на документ Person. Таким образом, свойство person в документе Paper является DBRef для правильного Person

Человек

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

Бумага

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

Я хотел бы создать запрос, который возвращает все документы, в которых упоминается человек А (slug=='PA'). Я попытался фильтровать в запросе и потерпел неудачу в операторе уменьшения карты. Как лучше всего справиться с этим в pymongo?

Этот запрос не дает результатов

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

Map Reduce также возвращает нулевые результаты

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

person Nathan    schedule 04.06.2012    source источник
comment
Два последующих запроса, один для получения _id лица А, а другой для получения документов, в которых упоминается этот идентификатор?   -  person paulmelnikow    schedule 05.06.2012


Ответы (1)


Похоже, я могу сделать это так, и я не могу использовать другие свойства

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