如何在MongoEngine中最好地处理不同的文档模式?



我想知道如何最好地处理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类,它允许你拥有模式上不存在的字段。同时检查DynamicFieldmeta = {"strict": False}

最新更新