Play2-Scala-Reactivemongo 使用 ReactiveMongo 失去 Mongo 架构灵活性

Play2-Scala-Reactivemongo Losing Mongo schema flexibility using ReactiveMongo

我正在尝试将 Play2 与 ReactiveMongo 结合使用来构建我的 Web 应用程序。我花了几天时间阅读相关文档和教程。 在我看来,MongoDB 最强大的功能之一是模式灵活性,即可以在同一个集合中存储结构不完全相同但可能彼此不同的文档。例如,一个文档可能有一个字段,而另一个文档没有。

玩 ReactiveMongo 用例 classes 来实现模型,但是用例 classes 显然有一个固定的结构。所以 class 的所有实例都将具有相同的结构。

是否代表失去灵活性?或者有一种方法可以使用 ReactiveMongo 实现模式灵活性?

根据我在 ReactiveMongo and ReactiveMongo Play plugin 的文档中阅读的内容。它们分别使用 BSON 和 JSON 结构。

只有当您使用 extensions 时,您才拥有定义为 case 类 的模型来构建 DAO。因此,您拥有所需的所有灵活性或所需的所有便利。这只是选择您使用的结构的问题。

除了 Andre 的回答:ReactiveMongo 还支持文档中的可选字段,在他们的案例中作为 Options classes。因此,您可以同时拥有 Scala class 文档建模的便利性和类型安全性以及灵活的文档结构。

如果您的文档结构中的字段名称完全是动态的(这在 Mongo 中通常是个坏主意),那么正如安德烈所说,您可能不想使用 case-[=完全基于 15=] 的 ReactiveMongo 文档建模。但是您通常也可以使用混合方法,其中文档的某些方面 de/serialized 动态使用名称-值映射,而某些用例 - classes.