2012-04-13 3 views
0

Я хочу извлечь значение определенного ключа «orderItems» в этом случае из DBObject, возвращаемого из MongoCollectionBase.find (...) Касбаха. У меня есть решение, но я не удовлетворен этим. Я нашел решение громоздким. Он забрасывал и преобразовывал java.util.Map, возвращенный с DBObject.toMap в Scala Map или другие коллекции на каждом шагу. Каков лучший способ этого? БлагодаряИзвлечение значения из DBObject MongoDB с использованием Scala/Casbah

val orders = provisioningDb("systems").find(MongoDBObject.empty, MongoDBObject("company.department.orders" -> 1)) 

import scala.collection.JavaConversions._ 

def findC(m : Map[String, Any]) : Iterable[Any] = { 
    val c = for ((k, v) <- m) yield (k, v) match { 
    case (k, v) if k equals "orderItems" => v 
    case (k, v : java.util.HashMap[String, Any]) => findC(toMap(v).asInstanceOf[Map[String, Any]]).head 
    case _ => Nil 
    } 
    c.filter(_.isInstanceOf[java.util.List[Any]]) 
} 

def toMap[K, E](m: java.util.Map[K, E]): Map[K, E] = { 
    Map.empty ++ new MapWrapper[K, E](m) 
} 

val orderItems = for { 
    x <- orders 
} yield x 

for (y <- orderItems) { 
    println(findC(toMap(y.toMap).asInstanceOf[Map[String, Any]])) 
} 

Данные 2 ряда образцов с деталями удалены, которые сохранялись в MongoDB,

company : {department : {orders -> [{"id" : "543", "quantity" : 2}, {"id" : "223", "quantity" : 21}, {"id" : "332", "quantity" : 3}] 


company : {department : {orders -> [{"id" : "222", "quantity" : 8}, {"id" : "663", "quantity" : 3] 

ответ

0

Вы пробовали смотреть в использовании case class вместе с Salat?

Вы также можете проверить это замечательное presentation, в частности слайд #28, который рассказывает о SalatDAO, который позволяет вам напрямую сохранять и извлекать ваши объекты!

Смежные вопросы