2011-01-21 4 views
0

이 함수를 작성하는 데 문제가 있습니다.이 함수는 문자열을 사용하고 연관된 문자열 목록을 반환합니다.mongodb casbah 및 목록 처리

def findByHash(hash: Hash) = { 
     val dbobj = mongoColl.findOne(MongoDBObject("hash" -> hash.hashStr)) 
     val n = dbobj match { 
      case Some(doc: com.mongodb.casbah.Imports.DBObject) => { 
       doc("n") match { 
        case Some(n: com.mongodb.casbah.Imports.DBObject) => { 
         Some(List[String]() ++ n map { x => x.asInstanceOf[String] }) 
        } 
        case _ => { 
         None // hash match but no n in object 
        } 
       } 
      } 
      case _ => { 
       None // no hash match 
      } 
     } 
     n 
} 

({..., 해시 : "ABCDE"N [ "A", "B", "ijojoij"]} _id MongoDB를 I에 같은 항목을 기대하고있어)

코드에 문제가 있습니까? 그것을 수정하는 방법을 알고 있습니까?

+0

각 호출이 무엇을 반환하는지 보려면 REPL을 사용하십시오. –

답변

3

doc ("n")은 AnyRef를 반환하므로 명시 적으로 BasicDBList로 캐스팅해야합니다.

val n = doc("n").asInstanceOf[BasicDBList] 
Some(List[String]() ++ n map { x => x.asInstanceOf[String] }) 
+0

고마워, 지금은 작동합니다. List [String]에 직접 캐스트 할 수 있습니까? – flagZ

+3

나는 그렇게 생각하지 않는다. 그러나 List (String) : List (doc ("n"). asInstanceOf [BasicDBList] .toArray : \ _ *). map (\ _. asInstanceOf [String])로 변환하는 다른 방법을 제안 할 수 있습니다. –