我想知道如何最好地处理MongoDB文档与不同的模式时,例如,使用MongoEngine。以下所有文档都在一个Books
集合中,如果这有助于解决问题,我可以自由地为文档添加字段。
假设我们有一个MongoDB模型Book
,在项目开始时看起来像这样:
{
'_id': ObjectId('...'),
'author': 'Martin Luther',
'age': '86'
}
随着项目时间的推移,额外的属性被保存(books_published
),一些属性改变了它们的模式(author
)。较新的Book
模型文档看起来像这样:
{
'_id': ObjectId('...'),
'author': {'first_name': 'Martin', 'last_name': 'Luther'},
'age': '86',
'books_published': 5
}
我怎样才能使Book
模型足够健壮,可以通过独立于其模式版本的模型类将数据加载到Python对象中?
(这里的MongoEngine主要贡献者)在我的公司,我们处理这个问题的方法是每当我们应用MongoEngine Schema更改时迁移文档(在这里的文档中可以找到一些示例)。这样我们就可以确保模式与数据库中的匹配。
如果出于某种原因,你不想这样做,你可以检查MongoEngine的DynamicDocument
类,它允许你拥有模式上不存在的字段。同时检查DynamicField
和meta = {"strict": False}
。