2013-02-14 8 views
0

내가 데이터를 다시 다음과 같습니다 MongoDB를 오는 있습니다혼합 유형의 중첩 목록에 salat DAO 모델을 지정하는 방법은 무엇입니까?

> db.foo.findOne() 
[ 
    { 
     "_id" : "some string", 
     "bar" : [ 
      [ 
       14960265, 
       0.5454545454545454 
      ], 
      [ 
       30680, 
       0.36363636363636365 
      ], 
      [ 
       12852625, 
       0.09090909090909091 
      ] 
     ], 
    } 
] 

bar 속성을 알 수없는 크기의 목록을 포함, 각 항목은 지능과 두 번을 포함하는 길이 두 가지의 목록입니다. 스칼라에서는 이것을 List [(Int, Double)]로 표현할 것입니다.

이 구조체를 Salat과 함께 사용하려면 어떻게 모델을 작성해야합니까?

Salat는 튜플을하지 않습니다, 그래서 시도 :

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

을하지만, 가지고 :

java.lang.IllegalArgumentException가가 : BasicBSONList 만하지 숫자 키, 작업 할 수 있습니다 : [A를 ]

또한 시도 :

,568,632 10

만 가지고 :

java.lang.ClassCastException가 : com.mongodb.BasicDBList이 캐스팅 할 수없는이 분명히

을 scala.collection.immutable.List하기 위해, 데이터가 저장 될 수있다 길이가 2 인 배열 대신 객체를 사용하는 것이 더 좋습니다. 그러나 그것이 내가 가진 것만 큼 Salat을 사용하여 deserialize하는 좋은 방법이 있습니까? 감사!

답변

3

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]) 

또는, 마일 사빈의 무형의 프로젝트 또는 사용하려는 생각은 알 로이스 Cochard의를 사용할 수 있습니다 Sherpa 프로젝트는 데이터를 비 직렬화합니다.

+0

설명과 대안을 알려준 매우 감사드립니다. 배열 구성원이 배열보다 개체로 더 잘 표현 될 것이라는 데 동의합니다. – mrjf