Scala: Пример использования Casbah для записи/обновления/удаления объектов в MongoDB?

Не удается найти описание в учебнике Casbah (http://mongodb.github.com/casbah/tutorial.html), как писать/обновлять/удалять объекты в MongoDB. Помогите пожалуйста с примерами или подскажите в каких классах искать эти методы. Спасибо!


person Anton Ashanin    schedule 27.03.2013    source источник
comment
Учебник, должно быть, изменился, поскольку теперь в нем есть все, что мне нужно для записи/обновления/удаления объектов. Другой учебник (api.mongodb.org/scala/casbah/2.0/tutorial.html) отсутствовали - чтение обоих должно содержать всю необходимую информацию. Или я что-то пропустил?   -  person akauppi    schedule 24.12.2013
comment
Ты прав. Я добавил примечание в ответ ниже, чтобы упомянуть, что документация была обновлена ​​​​через несколько месяцев после того, как вопрос был задан и на него был дан ответ, чтобы включить раздел об операциях CRUD. mongodb.github.io/casbah/tutorial.html#doing-crud- операции   -  person Dave Swartz    schedule 19.02.2014


Ответы (2)


Обновленный ответ

Через несколько месяцев после того, как был задан этот вопрос и получен ответ, документация Casbah была обновлена ​​и теперь включает Выполнение операций CRUD. Возможно, этот вопрос/ответ помог этому случиться. Или, возможно, кто-то понял, что не документировать операции CRUD в учебнике по БД было безумно.

Исходный ответ

Чтобы понять, почему руководство по Cashbah не содержит примеров того, как вставлять, обновлять или удалять документы из базы данных MongoDB, лучше всего начать с первого абзаца документации Casbah:

Casbah — это инструментарий Scala для MongoDB. Мы используем термин «набор инструментов», а не «драйвер», поскольку Casbah интегрирует слой поверх официального драйвера mongo-java-driver для лучшей интеграции со Scala. Это отличается от собственной реализации проводного протокола MongoDB, с которой драйвер Java справляется исключительно хорошо. Вместо полного переписывания Casbah использует имплициты и код 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)
  ...

Как видно из приведенного выше отрывка, MongoCollection Casbah является прокси-сервером для DBCollection драйвера Java. Это предназначено для иллюстрации того, что если что-то не обрабатывается набором инструментов Casbah, оно обрабатывается вызовом драйвера Java.

Ниже приведены ссылки на примеры того, как вставлять, обновлять и удалять документы из базы данных MongoDB с помощью драйвера Java:

  • Как вставлять и обновлять документы в базе данных описано здесь;
  • Пример того, как удалить документ, доступен здесь.

Теперь, когда вы понимаете, как Casbah соотносится с драйвером Java, портирование этих примеров для использования Casbah должно быть простым.

person Dave Swartz    schedule 28.03.2013

Я подготовил несколько примеров использования 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")
    )
  }
}
person Tal G.    schedule 20.08.2013
comment
хм ... ваш пример здесь не включает в себя запись/обновление/удаление, которые задал автор вопроса, но он охватывает преобразование данных (может быть, материал, стоящий за ссылкой, не видел там). - person akauppi; 23.12.2013
comment
@akauppi Материал по ссылке есть :) - person Tal G.; 24.12.2013