Scala,Morphia和Enumeration

jde*_*lop 9 enums scala morphia

我需要在Morphia中存储Scala类.除非我尝试存储_ <:枚举的集合,否则它会很好用

Morphia抱怨它没有这种类型的序列化器,我想知道如何提供一个.现在我将集合类型更改为Seq [String],并在集合中的每个项目上调用toString来填充它.

这很好,但我不确定这是否正确.

Edm*_*984 1

这个问题对于 MongoDB 顶部的几个可用抽象层来说很常见。这一切都回到了一个基本原因:json/bson 中没有等效的枚举。例如萨拉特也有同样的问题。

事实上,MongoDB Java 驱动程序不支持枚举,您可以在此处进行的讨论中阅读: https: //jira.mongodb.org/browse/JAVA-268,您可以在其中看到问题仍然存在。我见过的大多数将 MongoDB 与 Java 结合使用的框架都没有实现像这个这样的低级功能。我认为这个选择很有意义,因为它们让您选择如何处理低级驱动程序未处理的数据结构,而不是强加您如何去做。

总的来说,我觉得缺乏支持不是来自技术限制,而是来自设计选择。对于枚举,有多种方法可以将它们与其优缺点进行映射,而对于其他数据类型可能更简单。我不详细了解 MongoDB Java 驱动程序,但我想支持多种“模式”需要一些重构(也许这就是他们谈论新版本序列化的原因?)

这是我正在考虑的两个策略:

  • 如果你想对一个枚举进行索引并最小化空间占用,你可以将枚举映射到一个整数(不使用序数,请可以在java中设置枚举起始值)。
  • 如果您关心的是 mongoshell 上的可查询性,因为数据科学家将访问您的数据,您宁愿使用其字符串值来存储枚举

总而言之,在本机对象和 MongoDB 之间添加中间数据结构没有任何问题。Salat 通过 CustomTransformers 支持它,在 Morphia 上也许你需要明确地进行转换。大胆试试吧。