3

我正在使用 Django 和 MongoDB 构建一个网站。我们可以使用 2 个流行的 API 框架来连接DjangoMongoDB一个是mongoengine,另一个是django-mongodb-engine

因为最新mongoengine的 Django 不再支持Document,并且django-mongodb-engine需要另一个django-nonrel包,这使得开发环境有点复杂。

我想知道,如果我可以使用Pymongo连接DjangoMongoDB直接。

有没有相同经历的可以分享一下?以及如何setting.py在 Django 中设置数据库以公开数据库?

4

2 回答 2

7

您可以使用pyMongo如下代码

from pymongo import MongoClient


class MongoConnection(object):

    def __init__(self):
        client = MongoClient('localhost', 27017)
        self.db = client['database_name']

    def get_collection(self, name):
        self.collection = self.db[name]

我们根据需要创建连接。

class MyCollection(MongoConnection):

    def __init__(self):
       super(MyCollection, self).__init__()
       self.get_collection('collection_name')

    def update_and_save(self, obj):
       if self.collection.find({'id': obj.id}).count():
           self.collection.update({ "id": obj.id},{'id':123,'name':'test'})
       else:
           self.collection.insert_one({'id':123,'name':'test'})

    def remove(self, obj):
        if self.collection.find({'id': obj.id}).count():
           self.collection.delete_one({ "id": obj.id})

现在你只需要像下面这样调用。

my_col_obj = MyCollection()
obj = Mymodel.objects.first()
my_col_obj.update_and_save(obj)
my_col_obj.remove(obj)
于 2016-12-14T18:36:36.323 回答
2

我目前正在研究一个非常相似的问题。

你是对的,mongoengine不支持Django,但据我所知,pymongo也不支持它。至少mongoengine有计划在某一天支持它。如果你熟悉 Django,它有类似模型的东西——文档。它们很容易使用——这实际上是一个完整的工作 ORM。pymongo如果您要构建一个大型的、可重用的应用程序,您将无法做到这一点,您最终将自己编写 ORM 或拥有意大利面条式代码。这就是我使用mongoengine.

在你的settings.py你应该包括这个代码:

from mongoengine import connect
connect('your_database')

如果您出于某种原因仍想使用pymongo,您的代码应如下所示:

from pymongo import MongoClient
client = MongoClient()
于 2015-07-22T10:32:05.340 回答