Scala:使用Casbah在MongoDB中编写/更新/删除对象的示例?

时间:2013-03-27 18:50:27

标签: mongodb scala crud casbah

在Casbah教程(http://mongodb.github.com/casbah/tutorial.html)中找不到如何在MongoDB中编写/更新/删除对象的任何描述。请帮助说明示例或告诉哪些类可以查找这些方法。 谢谢!

2 个答案:

答案 0 :(得分:4)

更新了答案

在提出问题并回答几个月后,Casbah文档已更新为包含Doing CRUD operations部分。也许这个问题/答案有助于实现这一目标。或者也许有人意识到没有在数据库教程中记录CRUD操作是克雷克雷。

原始答案

为了理解为什么Cashbah教程没有提供如何从MongoDB数据库插入,更新或删除文档的示例,一个好的起点是Casbah文档的第一段:

  

Casbah是MongoDB的Scala工具包---我们使用术语“工具包”而不是“驱动程序”,因为Casbah在官方mongo-java驱动程序之上集成了一个层,以便更好地与Scala集成。这与MongoDB有线协议的本机实现相反,Java驱动程序非常好。 Casbah使用implicits和Pimp My Library代码来增强现有的Java代码,而不是完全重写。

Casbah是一个增强Java驱动程序的工具包。因此,必须首先阅读Java驱动程序文档,然后阅读Casbah文档,以便有效地使用Casbah。

为了进一步激发建议,请看一下Casbah如何从Java驱动程序中包装一些方法:

trait MongoCollectionBase extends Logging { self =>
  ...
  val underlying: DBCollection
  ...
  def save[A <% DBObject](jo: A) = underlying.save(jo)
  ...
  def update[A <% DBObject, B <% DBObject](q: A, o: B) = underlying.update(q, o)
  ...
  def remove[A <% DBObject](o: A) = underlying.remove(o)
  ...

正如上面的摘录所示,Casbah的MongoCollection是Java Driver DBCollection的代理。这是为了说明如果Casbah工具包没有处理某些内容,则会通过调用Java驱动程序来处理它。

下面是如何使用Java驱动程序从MongoDB数据库插入,更新和删除文档的示例链接:

  • 如何在数据库中插入和更新文档here;
  • 提供了一个如何删除文档的示例here

现在,您可以直接将这些示例移植到Casbah,以便了解Casbah与Java驱动程序的关系。

答案 1 :(得分:1)

我准备了一些如何使用casbah的例子,到目前为止非常简单。 我稍后会添加更多功能。

https://github.com/talgendler/casbah

object AddressMongoConverter {
  def convertToMongoObject(address: Address): DBObject = {
    MongoDBObject(
      STREET -> address.street,
      ZIP_CODE -> address.zipCode,
      CITY -> address.city,
      COUNTRY -> address.country
    )
  }

  def convertFromMongoObject(db: DBObject): Address = {
    Address(
      street = db.getAsOrElse[String](STREET, mongoFail),
      zipCode = db.getAsOrElse[Int](ZIP_CODE, mongoFail),
      city = db.getAsOrElse[String](CITY, "Tel-Aviv"), // slightly different get
      country = db.getAsOrElse[String](COUNTRY, "Israel")
    )
  }
}