我正在使用mongoengine和Django,并且在我的项目中需要在提供单个请求时连接到两个MongoDB实例。如果我使用它,它可以正常工作:
connect("mdb1")
#do stuff with mdb1
...
connect("mdb2")
#do stuff with mdb2
但我想知道这是否是一种正确的做法。
答案 0 :(得分:12)
使用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"}
答案 1 :(得分:2)
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'
答案 2 :(得分:0)
我认为没有正确的方法来做到这一点。 Matt的例子强制使用Document类型的连接。如果我想使用一个包含许多连接的文档,则该示例不适用。