是否有任何最佳实践或方法可用于在Mongo DB中对集合或对象进行版本设计?
对集合进行版本控制的要求是因为,集合中的对象可能会添加新的属性,但已添加的对象(即旧对象)将不具有这些属性和这些新属性的值。因此,在检索时,我们需要确保在对集合中同一对象的不同版本进行反序列化时不会破坏代码。
我可以考虑明确地向对象添加一个版本属性,但Mongo DB中是否有更好的内置替代方法来处理对象和/或集合的版本控制。
谢谢, 巴蒂亚
答案 0 :(得分:0)
我想最好的方法是在服务器上开始使用新软件时更新批处理过程中的所有对象,否则你永远不会知道对象什么时候会更新,你需要保留那些永远存在的老版本。
到目前为止,我正在做的另一件事是,它(到目前为止)工作的策略是只允许向对象添加新属性。这种方式在最坏的情况下DB不会拥有所有数据,但对于我所知道的所有json-serializers来说都没问题。但这意味着您不能删除或重命名属性以及修改其类型(从标量值到对象,数组;从对象到标量,数组; ...)。
由于我通常想要存储额外的信息而不是更少的信息,这似乎是一个很好的解决方案,对我没有任何实际限制。
如果由于标量值不够而需要更改类型,您仍然可以创建一些代码,这些代码会将具有旧值的每个对象转换为新代码。如果您身边的批量更新能够执行更改,我仍然会这样做,但有时需要用户输入。
例如,如果您以前只将密码保存为md5-hash,则它是标量值。但是有人告诉你,它们应该与sha512一起存储为盐,现在你需要一个密码的对象字段,你可以将它命名为password_sha512,你可以在其中存储盐和散列密码。