Подключение к нескольким экземплярам mongodb из django - PullRequest
3 голосов
/ 20 мая 2011

Я использую mongoengine с Django, и в рамках моего проекта мне нужно подключиться к двум экземплярам MongoDB при обслуживании одного запроса. Это работает просто отлично, если я использую:

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

но мне интересно, если это правильный способ сделать это.

Ответы [ 3 ]

12 голосов
/ 25 марта 2012

Несколько баз данных * Добавлена ​​поддержка 1002 * в 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"}
2 голосов
/ 31 августа 2015

@ Рикардо в официальной документации есть раздел, объясняющий управление контекстом (т. Е. Переключение баз данных с использованием одного и того же документа: http://mongoengine -odm.readthedocs.org / en / latest / guide / connect.html # context-manager).Следующий код переключит класс 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 голосов
/ 18 апреля 2013

Я думаю, что нет правильного способа сделать это. На примере Мэтта получается обязательное использование соединения по типу документа. Если я хочу использовать один документ со многими соединениями, пример не подходит.

...