我正在尝试将Play2与ReactiveMongo一起使用来构建我的Web应用程序。我花了几天时间阅读相关文档和教程。 在我看来,MongoDB最强大的功能之一是架构灵活性,即可以在同一个集合文档中存储不完全相同的结构,但可能彼此不同。例如,一个文档可能有另一个文档没有的字段。
使用ReactiveMongo用例类来实现模型,但是案例类显然具有固定的结构。所以该类的所有实例都具有相同的结构。
它是否代表失去灵活性?或者有一种方法可以使用ReactiveMongo实现架构灵活性?
答案 0 :(得分:3)
除了安德烈的回答:ReactiveMongo还支持文档中的可选字段,作为案例类中的选项。因此,您可以同时拥有Scala类的便利性和类型安全性,以及灵活的文档结构。
如果您的文档结构是字段名称完全是动态的(在Mongo中通常是一个坏主意),那么正如Andre所说,您可能根本不想使用基于案例类的ReactiveMongo文档建模。但是您通常也可以使用混合方法,其中使用名称 - 值映射动态地对文档的某些方面进行解序/序列化,并使用一些用例类。
答案 1 :(得分:1)
从我在ReactiveMongo和ReactiveMongo Play plugin的文档中读到的内容。它们分别与BSON和JSON结构一起使用。
仅当您使用extensions时,您将模型定义为案例类来构建DAO。因此,您拥有所需的所有灵活性或所需的所有便利性。这只是选择与您合作的结构的问题。