这个问题已经在 StackOverflow 上问过了,
提出的问题可以追溯到 2013 年,现在是 2015 年,Django 已经快速成长。
截至 2015 年,在 Django 1.8 中使用 mongodb 的情况如何?
Django 是否支持开箱即用的 Monogodb(带有 db 适配器)?还是应该使用像 django-nonrel 这样的其他发行版?
这个问题已经在 StackOverflow 上问过了,
提出的问题可以追溯到 2013 年,现在是 2015 年,Django 已经快速成长。
截至 2015 年,在 Django 1.8 中使用 mongodb 的情况如何?
Django 是否支持开箱即用的 Monogodb(带有 db 适配器)?还是应该使用像 django-nonrel 这样的其他发行版?
我不认为 Django 为 MongoDB 提供了开箱即用的支持。它更适合关系数据库。
一种解决方案可能是使用MongoEngine.
MongoEngine 是一个对象-文档映射器,用 Python 编写,用于与 MongoDB 一起工作。
您只需要MongoEngine
使用 Django 进行配置,然后它应该可以舒适地工作。
Django 是否支持开箱即用的 Monogodb(带有 db 适配器)?
不,不是的。如果你能找到一个 django 兼容的 mongodb 引擎,那么它将完美运行。
好消息是有这样一个引擎,叫做django-mongodb-engine
; 坏消息是它依赖于django-nonrel
未针对最新稳定版本的 django 进行更新。
所以,如果你必须 - 你可以使用 MongoDB,代价是没有一些更新的 django 功能可供你使用(更重要的是,任何安全补丁)。
如果你想用 mongodb 来补充你的主数据库——也就是说,mongodb 不会是你的主数据库,那么这个过程会容易得多。
所以,总结一下:
django 1.8 不提供对 mongodb(或其他非关系数据库)作为主要数据存储的开箱即用支持。
使用第三方django-nonrel
软件包可以获得支持,该软件包落后于当前 django 生产版本。
只是我的想法,有些主观和自以为是,但我会说它效果不佳。我很快打消了尝试用 MongoDB 运行 Django 的想法,因为它的身份验证系统严重依赖关系数据库才能工作。
显然有办法解决这个问题,但最终我决定对于我的项目来说,仅仅使用 MongoDB 是不值得的。
我遇到了一个支持 MongoDB 上最新 django 的新包:djongo
如上所述,mongoengine 并不支持 django 的所有 contrib 应用程序。特别是 auth 应用程序不适用于mongoengine
Djongo 声称将 SQL 查询编译成 mongodb 查询。所以它本质上与版本无关,适用于所有版本的 Django。
披露:我通过修复小错误为这个包做出了贡献。
我知道已经三年了,但是对于那些想知道 MongoDB 和 Django 的人来说,现在应该知道情况没有改变。前面描述的 Mongoengine 是一个足够好的工具,但仍然存在局限性。例如,当我使用 mongoengine 将 mongodb 与 django 集成时,我无法在我的应用程序中使用弹性搜索。此外,使用 mongoDB,您会失去 Django 管理和身份验证功能。所以,MongoDB 和 Django 仍然是一个冒险的选择