2012-03-12 45 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中:-)