2011-01-21 10 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のに私のようなエントリを期待しています)

コードに問題はありますか?あなたはそれを修正する方法を知っていますか?

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

関連する問題