2015-05-11 2 views
0

Я сохраняю измененный набор в mongoDB, и теперь я хочу получить этот набор из mongo, но я не могу это сделать, возможно, я делаю это неправильно. здесь мой кодКак восстановить Scala mutable Set from mongo

class A{ 
var genreIdSet = scala.collection.mutable.Set[Int]() 

def addToGenreIdSet(genreId : Int) = { 
    genreIdSet += genreId 

    } 

    def getGenreIdSet : scala.collection.mutable.Set[Int]= { 
    genreIdSet 
    } 
} 

для хранения в Монго

val result:WriteResult= collection.insert(new BasicDBObject("_id",artistImpl.getUuid) 
         .append("GetGenreIdSet",artistImpl.getGenreIdSet) 
              ,WriteConcern.Acknowledged) 

и я извлечения как этот

val cursor=collection.find() 
    var obj=new BasicDBObject 
try { 
    while(cursor.hasNext) 
    { 
     obj=cursor.next().asInstanceOf[BasicDBObject] 
     id=obj.getString("_id").toInt 
     log.info("id value is "+id) 
       var a =obj.get("GetGenreIdSet").asInstanceOf[scala.collection.mutable.Set[Int]] 
     log.info("Set is "+a) 

, но он выдает ошибку

-com.mongodb.BasicDBList cannot be cast to scala.collection.mutable.Set 
java.lang.ClassCastException: com.mongodb.BasicDBList cannot be cast to scala.collection.mutable.Set 

Как я решить эту проблему, пожалуйста, помогите мне

ответ

1

вы можете получить с помощью BasicDBList.

var genreIdSet = scala.collection.mutable.Set[Int]() 


val cursor=collection.find() 
    var obj=new BasicDBObject 
try { 
    while(cursor.hasNext) 
    { 
     obj=cursor.next().asInstanceOf[BasicDBObject] 
     id=obj.getString("_id").toInt 
     var list:BasicDBList=obj.get("GetGenreIdSet").asInstanceOf[BasicDBList] 
     for(value<-list) 
     { 
     genreIdSet+=value.toString().toInt 
     } 
1

Там нет неявных конверторов из BasicDBList в виде Set.

Эквивалент к BasicDBList будет List и есть помощники для MongoDBObjects, которые позволяют получить ключ в качестве типа, например:

obj.getAs[List[Integer]]("GetGenreIdSet") 

getAs следовать Scala конвенции и возвращает Option здесь было бы вернуть Option[List[Integer]]