Mongodb 如何为混合类型的嵌套列表指定salatdao模型?
我从MongoDB返回的数据如下所示: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
> 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的夏尔巴项目来反序列化数据。 非常感谢您的解释和其他选择。我同意数组成员应该更好地表示为对象而不是数组。非常感谢您的解释和指向备选方案的指针。我同意数组成员最好表示为对象而不是数组。