Flask MongoDB游标查询问题

时间:2012-10-02 02:18:07

标签: python mongodb flask

我正在尝试创建一个使用MongoDB在Flask中吐出JSON的API。

在我的控制器中,我有一个类似的路线设置:

@frontend.route('/api/get_images_by_building_id/<building_id>')
def api_get_images_by_building_id(building_id):
    building_images = database.get_images_by_building_id(building_id)
    return building_images
在作为数据库导入的db.py中的

,我有以下两个函数:

def get_image_ids_by_building_id(self, building_id):
    try:
        return self.buildings.find_one(ObjectId(building_id),{"vertical_images":1})["vertical_images"]
    except:
        return None

返回:

[ObjectId('506638290f536676fc004702'), ObjectId('506638290f536676fc004703'), ObjectId('506638290f536676fc004704'), ObjectId('506638290f536676fc004705'), ObjectId('506638290f536676fc004706'), ObjectId('506638290f536676fc004707'), ObjectId('506638290f536676fc004708')]

第二个功能:

def get_images_by_building_id(self, building_id):
    try:
        image_ids = self.get_image_ids_by_building_id(building_id)
        temp = self.images.find({ "_id" : { "$in" : image_ids } })
        return temp
    except:
        return None

处理mongo游标对象的最佳做法是什么?它会导致问题,因为我无法在控制器中进行jsonify。在数据库中,我应该准确地操作数据输出方式,还是应该在控制器中完成?

1 个答案:

答案 0 :(得分:1)

我倾向于保持请求处理程序尽可能简单和薄。如果json.dumps对您不利并且您不喜欢在数据库模块中放置一堆特定于格式/序列化的代码,我通常会创建一个名为serializers.py的模块来自定义输出。

至于最佳实践,我认为最好不要放一堆,“我希望我的控制器完全按照这样返回它,所以我将把所有这些特定的东西放在我的数据库模块中”。如果喘气你需要返回除json以外的东西(不太可能,我知道)! db模块最好返回db对象(而不是自定义序列化的json字符串),并且有一个单独的模块知道如何序列化文档。