2012年9月11日

Python MongoDB 使用 pymongo and MongoEngine

MongoEngine是建構在pymongo之上的ORM,pymongo本身沒有ORM對應,使用MongoEngine的好處在於他的model定義清楚以及有基本的validation和meta indexes等幫助。

我習慣的做法是先用MongoEngine定義清楚物件屬性,但是之後不一定要拿來使用,主要原因是MongoEngine直接作成python object,這方便了server-side的template render,但是沒有提供MongoDB原生讀取bson(類似json)的能力,當然我們可以另外寫一個Decoder/Encoder,但是那就有點本末導置了。

所以習慣上在建立api的時後我會使用pymongo來做操作,pymongo直接寫入會快上數倍,但是沒有validation要小心處理,另一個好處是pymongo取出來的是bson可以很容易轉換成json(使用bson.json_util)這對於ajax回應是比較方便的,還有加上我們已經習慣在client做template render,所以一樣是需要使用json資料來轉換成client端的object。

MongoEngine也適合用在task裡,和一些如物件本身的方法操作的地方。

pymongo還有一個很大的優點是語法比較接近原生MongoDB,MongoEngine有很多自訂語法,有Google App Engine的影子,但是又非常不太一樣。