2013-03-27 32 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

相關問題