2012-03-12 42 views
1

我將django-nonrel與mongodb-engine結合使用。如果存儲在mongodb對象中的所有字段也都在模型中定義,那麼它工作得很好。訪問Django模型的原始Mongodb數據

但是我在mongodb對象上有一些額外的數據,它們沒有在模型上設置。這是我的問題。現在,我做了一個額外的查詢來獲得原始MongoDB的對象,像這樣:

collection = connection.get_collection(self._meta.db_table) 
self._mongo_data = collection.find_one({'_id': ObjectId(self.pk)}) 

它工作正常,但是,這不是有效的,因爲這是創造的這個查詢運行第二次(第一次模型,後來得到原始的mongodb數據)。

有沒有辦法訪問原始數據,檢索創建模型?

在模型上設置這些額外的字段不是一個選項,因爲額外的數據是動態創建的。

回答

1

我不認爲有這樣做的好方法。

選擇的字段在查詢時僅限於模型的字段:

https://github.com/django-nonrel/mongodb-engine/blob/master/django_mongodb_engine/compiler.py#L123

https://github.com/django/django/blob/master/django/db/models/sql/query.py#L1638

你可以使用的字典場/嵌入的對象,並有某種文檔級別的命名空間抓住這些從?

+0

感謝您的幫助!我發現我可以將額外的mongo數據添加到結果集中,不幸的是,一旦模型創建,這些額外的數據就會丟失: https://github.com/django/django/blob/master/django/db/models/ query.py#L298 – Willian 2012-03-13 08:51:52

+1

我認爲你最好的選擇是採取額外的數據,並使用嵌入式文檔或字典領域嵌入它。 – gone 2012-03-14 19:42:54

1

如果有一種方法可以使用SQL數據庫執行此操作,但它不適用於MongoDB引擎,請打開一個錯誤報告。否則恐怕你需要首先將這個特性加入到Django中:-)