2011-01-21 51 views
0

我有問題寫這個函數,它接受一個字符串並返回一個關聯的字符串列表。mongodb casbah和列表處理

(我期待像條目{_id:...,哈希: 「ABCDE」,N:[ 「一」, 「B」, 「ijojoij」]}中的mongodb)

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 
} 

代碼有問題嗎?你知道如何改正它嗎?

+0

使用REPL查看每個呼叫正在返回的內容。 – 2011-01-21 01:45:41

回答

3

doc(「n」)返回AnyRef,所以您應該明確地將其轉換爲BasicDBList。

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

非常感謝,它現在有效。我可以直接將這個列表[String]? – flagZ 2011-01-22 12:53:56