从django连接到多个mongodb实例

问题描述 投票:3回答:3

我正在使用mongoengine和Django,并且在我的项目中需要在提供单个请求时连接到两个MongoDB实例。如果我使用它可以正常工作:

connect("mdb1")
#do stuff with mdb1
...
connect("mdb2")
#do stuff with mdb2

但我想知道这是否是一种正确的做法。

django mongodb mongoengine
3个回答
12
投票

MongoEngine 0.6中添加了Multiple database支持

使用register_connection演示。

alias_lists = ['users-books-db', 'user-db', 'book-db'] # list of aliases
dbs = ['author-book-pairs', 'users', 'books'] # list of databases
for alias, db in zip(alias_lists, dbs):
    register_connection(alias, db)

class User(Document):
    name = StringField()
    meta = {"db_alias": "user-db"}

class Book(Document):
    name = StringField()
    meta = {"db_alias": "book-db"}

class AuthorBooks(Document):
    author = ReferenceField(User)
    book = ReferenceField(Book)
    meta = {"db_alias": "users-books-db"}

2
投票

@Ricardo在官方文档中有一节解释上下文管理(即使用相同文档切换数据库:http://mongoengine-odm.readthedocs.org/en/latest/guide/connecting.html#context-managers)。以下代码将最初存储在User中的类users-db切换到新数据库archive-user-db

from mongoengine.context_managers import switch_db

class User(Document):
     name = StringField()

     meta = {"db_alias": "user-db"}

with switch_db(User, 'archive-user-db') as User:
     User(name="Ross").save()  # Saves the 'archive-user-db'

0
投票

我认为没有正确的方法来做到这一点。 Matt的例子强制使用Document类型的连接。如果我想使用一个具有许多连接的文档,则该示例不适合。

© www.soinside.com 2019 - 2024. All rights reserved.