私は Django で mongoengine を使用しており、プロジェクト内で単一のリクエストを処理しながら MongoDB の 2 つのインスタンスに接続する必要があります。私が使用する場合、それはうまく動作します:
connect("mdb1")
#do stuff with mdb1
...
connect("mdb2")
#do stuff with mdb2
しかし、それが適切な方法であるかどうか疑問に思っています。
私は Django で mongoengine を使用しており、プロジェクト内で単一のリクエストを処理しながら MongoDB の 2 つのインスタンスに接続する必要があります。私が使用する場合、それはうまく動作します:
connect("mdb1")
#do stuff with mdb1
...
connect("mdb2")
#do stuff with mdb2
しかし、それが適切な方法であるかどうか疑問に思っています。
MongoEngine 0.6 で複数データベースのサポートが追加されました
を使ったデモ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"}
公式ドキュメントの@Ricardoには、コンテキスト管理を説明するセクションがあります(つまり、同じドキュメントを使用してデータベースを切り替える: http://docs.mongoengine.org/guide/connecting.html#switch-database )。次のコードは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'
これを行う適切な方法はないと思います。Matt の例では、ドキュメント タイプによる接続の使用が義務付けられています。多くの接続を持つ 1 つのドキュメントを使用したい場合、この例は適切ではありません。