pymongo:通过引用查询的最佳方式?

时间:2012-06-04 20:58:52

标签: mongodb pymongo

我在Paper集合中有一堆Papers个文档。每个Paper都有一个DBRef到Person文档。因此,Paper文档中的person属性是对正确的Person

的DBRef

{'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}

我想创建一个返回所有引用Person A(slug =='PA')的论文的查询。我尝试在查询中进行过滤,但在map reduce语句中失败了。在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

1 个答案:

答案 0 :(得分:1)

看起来我可以这样做,而且我不能使用其他属性

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