Scala,Morphia和枚举

标签 scala enums morphia

我需要将Scala类存储在Morphia中。带有批注的效果很好,除非我尝试存储 _ <的集合:枚举

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

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

最佳答案

这个问题在MongoDB顶部的几个可用抽象层中很常见。都归结为一个基本原因:json/bson中没有等效的枚举。例如,萨拉特有同样的问题。

实际上, MongoDB Java驱动程序不支持枚举,因为您可以在下面的讨论中阅读:https://jira.mongodb.org/browse/JAVA-268,您仍然可以看到问题所在。我看到的大多数将MongoDB与Java结合使用的框架都没有实现这种低级功能。我认为这种选择很有道理,因为它们使您可以选择如何处理未由低级驱动程序处理的数据结构,而不是强加于您如何执行。

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

我正在考虑以下两种策略:

  • 如果要在枚举上建立索引并最大程度地减少空间占用,则将枚举映射为整数(不使用ordinal,请can set enum start value in java)。
  • 如果您担心在mongoshell上的可查询性,因为数据科学家将访问您的数据,您宁愿使用其字符串值
  • 存储该枚举

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

    关于Scala,Morphia和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12788781/

    相关文章:

    scala - 通过scala获取存储在azure data lake中的文件名列表

    Java Enum 链接到另一个 Enum

    gridfs - 吗啡支持GridFS吗?

    Scala - tuple3 - 语法糖

    regex - Scala:使用正则表达式提取字符串的一部分

    scala - scala.Enumeration.nextName 如何获取标识 rune 本?

    java - 枚举设计决策的常量特定方法

    c - 从 C 中的 typedef 枚举获取数组,索引处的值

    java - 具有未定义字段数的 Morphia 更新文档

    java - MongoDB 组合键