2013-03-27 30 views
2

在Casbah教程(http://mongodb.github.com/casbah/tutorial.html)中找不到任何描述如何在MongoDB中编写/更新/删除对象。请帮忙举例说明或者告诉用什么类去寻找这些方法。 谢谢!Scala:使用Casbah在MongoDB中写入/更新/删除对象的例子?

+0

教程必须改变,因为现在它似乎有我需要的写/更新/删除对象的所有东西。另一个教程(http://api.mongodb。org/scala/casbah/2.0/tutorial.html)缺乏这些 - 阅读都应该有所有需要的信息。或者我错过了什么? – akauppi 2013-12-23 20:02:47

+0

你是对的。我在下面的答案中添加了一个注释,提到文件在问题被提出并回答几个月之后进行了更新,以包含有关CRUD操作的部分。 http://mongodb.github.io/casbah/tutorial.html#doing-crud-operations – 2014-02-19 04:42:14

回答

4

更新回答

几个月后,这个问题被问和回答的卡斯巴文档进行了更新,包括Doing CRUD operations部分。也许这个问题/答案有助于实现这一目标。或者也许有人意识到不在数据库教程中记录CRUD操作是cray cray。

原来的答案

为了理解为什么Cashbah教程没有提供如何插入,更新或从MongoDB数据库中删除的文件的例子,一个良好的开端是卡斯巴第一段文档:

卡斯巴是Scala的工具MongoDB的---我们用术语“工具包”,而不是“司机”,作为卡斯巴具有更好的整合集成官方蒙戈的Java驱动程序之上的一层斯卡拉。这与MongoDB有线协议的本地实现不同,Java驱动程序非常好。 Casbah不是完全重写,而是使用implicits和Pimp My Library代码来增强现有的Java代码。

Casbah是一个增强Java驱动程序的工具包。因此,必须先阅读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) 
    ... 

正如上述摘录表明,卡斯巴的MongoCollection是Java驱动程序的DBCollection的代理。这是为了说明如果某件事没有被Casbah工具包处理,它将被调用Java驱动程序来处理。

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

  • 如何插入和更新数据库中的文件进行了说明here;
  • 如何删除文档的示例可用here

现在应该很简单地将这些示例移植到Casbah中,以了解Casbah如何与Java驱动程序相关。

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") 
    ) 
    } 
} 
+0

嗯..你在这里的示例不涉及写作/更新/删除问题作者要求 - 但它涵盖数据转换(链接背后的东西可能没有看到)。 – akauppi 2013-12-23 19:19:02

+0

@akauppi链接背后的东西有:) – 2013-12-24 11:33:45

相关问题