Connecting to multiple mongodb instances from django

前端 未结 3 1601
慢半拍i
慢半拍i 2021-01-20 23:23

I am using mongoengine with Django and within my project need to connect to two instances of MongoDB while serving single request. It works just fine if I use:

c         


        
相关标签:
3条回答
  • 2021-01-21 00:11

    Multiple database support was added in MongoEngine 0.6

    Demo using 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"}
    
    0 讨论(0)
  • 2021-01-21 00:19

    I think there is no a proper way to do this. The example of Matt turns obligatory use an connection by Document type. If I want to use one document with many connections the example doesn't fit.

    0 讨论(0)
  • 2021-01-21 00:21

    @Ricardo at the official documentation theres a section explaining context management (i.e switching databases using the same document: http://mongoengine-odm.readthedocs.org/en/latest/guide/connecting.html#context-managers). The following code will switch the class User, originally stored in users-db to the new database 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 讨论(0)
提交回复
热议问题