Mongodb 如何为混合类型的嵌套列表指定salatdao模型?

Mongodb 如何为混合类型的嵌套列表指定salatdao模型?,mongodb,scala,serialization,casbah,salat,Mongodb,Scala,Serialization,Casbah,Salat,我从MongoDB返回的数据如下所示: > db.foo.findOne() [ { "_id" : "some string", "bar" : [ [ 14960265, 0.5454545454545454 ], [ 30680, 0.363636

我从MongoDB返回的数据如下所示:

> db.foo.findOne()
[
    {
        "_id" : "some string",
        "bar" : [
            [
                14960265,
                0.5454545454545454
            ],
            [
                30680,
                0.36363636363636365
            ],
            [
                12852625,
                0.09090909090909091
            ]
        ],
    }
]
bar
属性包含一个大小未知的列表,其中的每一项都是一个长度为2的列表,其中包含一个Int和一个Double。在Scala中,我将其表示为List[(Int,Double)]

我将如何编写用于Salat的该结构的模型

Salat不做元组,所以我试着:

case class FooEntry(a: Int, b: Double)
case class Foo(_id: String, bar: List[FooEntry])
但是得到:

java.lang.IllegalArgumentException:BasicBonSonList只能与 数字键,而不是:[a]

还尝试:

case class Foo(_id: String, sps: List[Any])
但是得到:

java.lang.ClassCastException:com.mongodb.BasicDBList无法强制转换 到scala.collection.immutable.List


显然,数据可以以更好的形式存储,使用一个对象而不是两个数组的长度。但是考虑到这就是我所得到的,有没有一种好的方法可以使用Salat来反序列化它呢?谢谢

这里是萨拉特项目负责人。无论数据结构如何,都需要为列表指定类型。Salat还不支持元组,虽然Salat支持多态集合(这需要类型提示!),但它不支持像您这样的异构类型列表

您能否重新构造数据,使数组成员不是列表而是列表

[
  {x: 123, y: 123.0}, 
  {x: 456, y: 456.0}
]
那你可以用

case class Bar(x: Long, y: Double)
case class Foo(_id: String, sps: List[Bar])

交替地,考虑使用Miles Sabin的无形状项目或Alois Cochard的夏尔巴项目来反序列化数据。 这里是萨拉特项目负责人。无论数据结构如何,都需要为列表指定类型。Salat还不支持元组,虽然Salat支持多态集合(这需要类型提示!),但它不支持像您这样的异构类型列表

您能否重新构造数据,使数组成员不是列表而是列表

[
  {x: 123, y: 123.0}, 
  {x: 456, y: 456.0}
]
那你可以用

case class Bar(x: Long, y: Double)
case class Foo(_id: String, sps: List[Bar])

交替地,考虑使用Miles Sabin的无形状项目或Alois Cochard的夏尔巴项目来反序列化数据。 非常感谢您的解释和其他选择。我同意数组成员应该更好地表示为对象而不是数组。非常感谢您的解释和指向备选方案的指针。我同意数组成员最好表示为对象而不是数组。