9

我需要在 Morphia 中存储 Scala 类。除非我尝试存储_ <: Enumeration的集合,否则使用注释它工作得很好

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

效果很好,但是我不确定这是否正确。

4

1 回答 1

1

这个问题在 MongoDB 之上的几个可用抽象层中很常见。这一切都回到了一个基本原因:在 json/bson 中没有等效的枚举。例如,Salat也有同样的问题。

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

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

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

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

总而言之,在本机对象和 MongoDB 之间添加中间数据结构并没有错。Salat 通过 CustomTransformers 支持它,在 Morphia 上,您可能需要明确地进行转换。去吧。

于 2013-08-04T08:28:03.303 回答