我希望使用Scala 2.9.x和Casbah实现我的DAO访问层。
给定我的实体是带有参数的案例类:

case class Price (Id: Option[String], Price: Double, ItemName: String)


我的BSON文档看起来像:

{
    "_id" : ObjectId("55dd1874b46f7178c8ddb737"),
    "ItemName" : "Beet",
    "Price" : "6"
}


我尝试创建一个属性

  override var prices: List[Price] =
    db("prices").find.toList.map(
      o => Price(Some(o("_id").toString),
      o("Price").toString.toDouble,
      o.getAs[String]("ItemName").get ))


这是我主要关注的问题:
 1.映射字段看起来有点麻烦,应该对此进行一些自动化。我知道我可以从import net.liftweb.json。{DefaultFormats,Serialization}或其他任何语言中使用解析器,但是我很确定应该有与Casbah相关的东西。可能是其他MongoDB Scala ORM。
 2.我不喜欢将其放入var的想法。公开数据的更好方法是什么?我应该使用财产吗?
3.实体的最佳做法是什么(如您所见,我使用带参数的case类,但不带任何主体)

最佳答案

我为此使用Salat:https://github.com/salat/salat/wiki/Quick-start

为了保存,可以使用asDBObject转换案例类。

val testCaseClass = new TestCaseClass(null, "testName", 30, addressList)
collection.save(grater[TestCaseClass].asDBObject(testCaseClass))


对于获取,请使用asObject代替

val savedCaseClass=grater[TestCaseClass].asObject(collection.findOne().get)


这是案例类的定义

class TestCaseClass(_id:ObjectId, name:String, age:Int, address:List[AddressCase])

09-27 23:39