繁体   English   中英

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

[英]Scala: Example of using Casbah to write / update / delete objects in MongoDB?

在Casbah教程( http://mongodb.github.com/casbah/tutorial.html )中找不到如何在MongoDB中写入/更新/删除对象的任何描述。 请提供示例帮助,或告诉您寻找这些方法的类。 谢谢!

更新的答案

在问及回答此问题后的几个月,Casbah文档已更新为包括“ 执行CRUD操作”部分。 也许这个问题/答案有助于实现这一目标。 也许有人意识到,不在数据库教程中记录CRUD操作的人就是cray cray。

原始答案

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

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

Casbah是扩展Java驱动程序的工具包。 因此,为了有效地使用Casbah,必须先阅读Java驱动程序文档,然后阅读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数据库中插入,更新和删除文档的示例的链接:

  • 如何插入和更新数据库中的文件被记录在这里 ;
  • 这里提供有关如何删除文档的示例。

既然您已经了解了Casbah与Java驱动程序的关系,那么将这些示例移植到使用Casbah应该很简单。

到目前为止,我已经准备了一些有关如何使用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")
    )
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM