Menu Docs
Página inicial do Docs
/ / /
Scala
/

Início rápido (exemplos de classes de caso)

Nesta página

  • Visão geral
  • Configurar classes de caso
  • Inserir uma pessoa
  • Inserir instâncias de várias pessoas
  • Consultando a coleção
  • Encontre a primeira pessoa correspondente
  • Retornar todos os documentos
  • Recuperar uma pessoa usando um filtro de query
  • Encontre instâncias de pessoa correspondentes
  • Atualize documentos
  • Exclua documentos

Este guia é semelhante aoguia de Início Rápido , mas usa classes de caso para modelar documentos em vez da classe genérica Document .

Os exemplos de código neste guia vêm do QuickTourCaseClass.scalano Github repositório do do código fonte do driver.

Importante

Consulte a documentação de macros do BSON para obter informações sobre o uso de macros para configurar o suporte à classe de caso com sua instância MongoCollection .

Primeiro, crie a classe de caso que você deseja usar para representar os documentos na coleção. O seguinte código cria uma classe de caso Person e um objeto complementar:

import org.mongodb.scala.bson.ObjectId
object Person {
def apply(firstName: String, lastName: String): Person =
Person(new ObjectId(), firstName, lastName)
}
case class Person(_id: ObjectId, firstName: String, lastName: String)

Observação

No objeto complementar, o método apply() pode atribuir automaticamente um valor _id ao criar novas instâncias que não incluam um. No MongoDB, o campo _id representa a chave primária de um documento, portanto, ao ter um campo _id na classe de caso, você permite o acesso à chave primária.

Ao usar Person com uma collection, deve haver um Codec que possa convertê-lo em e de BSON. O objeto complementar org.mongodb.scala.bson.codecs.Macros fornece macros que podem gerar automaticamente um codec para classes de caso no momento da compilação. O exemplo seguinte cria um novo CodecRegistry que inclui um codec para a classe de caso Person :

import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.MongoClient.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromRegistries, fromProviders}
val codecRegistry = fromRegistries(fromProviders(classOf[Person]), DEFAULT_CODEC_REGISTRY )

Após o CodecRegistry ser configurado, a próxima etapa é criar um MongoCollection[Person]. O exemplo seguinte utiliza a test coleção do mydb banco de dados do :

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("mydb").withCodecRegistry(codecRegistry)
val collection: MongoCollection[Person] = database.getCollection("test")

Observação

O CodecRegistry pode ser definido ao criar um MongoClient, no nível do banco de dados ou no nível da collection. A API é flexível, permitindo diferentes instâncias CodecRegistry conforme necessário.

Com o MongoCollection configurado corretamente, inserir Person instâncias na coleção é simples:

val person: Person = Person("Ada", "Lovelace")
collection.insertOne(person).results()

Para inserir múltiplas instâncias do Person , utilize o método insertMany() . O exemplo a seguir usa o printResults() implícito e bloqueia até que o observador seja concluído e então imprime cada resultado:

val people: Seq[Person] = Seq(
Person("Charles", "Babbage"),
Person("George", "Boole"),
Person("Gertrude", "Blanch"),
Person("Grace", "Hopper"),
Person("Ida", "Rhodes"),
Person("Jean", "Bartik"),
Person("John", "Backus"),
Person("Lucy", "Sanders"),
Person("Tim", "Berners Lee"),
Person("Zaphod", "Beeblebrox")
)
collection.insertMany(people).printResults()

Este código gera a seguinte mensagem:

The operation completed successfully

Utilize o método find() para consultar uma collection.

A query da collection usa a mesma API usada no Início rápido:

collection.find().first().printHeadResult()

O exemplo imprime o primeiro Person na coleção:

Person(58dd0a68218de22333435fa4, Ada, Lovelace)

Para recuperar todos os documentos na coleção, use o método find() . O método find() retorna uma instância do FindObservable que fornece uma interface fluente para encadear ou controlar operações de localização. Os usos a seguir imprimem todos os documentos na coleção como instâncias Person :

collection.find().printResults()

Para retornar um subconjunto dos documentos em nossa coleção, passe um filtro para o método find() . Por exemplo, o seguinte exemplo retorna o primeiro Person cujo nome é "Ida":

import org.mongodb.scala.model.Filters._
collection.find(equal("firstName", "Ida")).first().printHeadResult()

Este exemplo gera o seguinte resultado:

Person(58dd0a68218de22333435fa4, Ida, Rhodes)

Dica

Você pode utilizar os auxiliares Filters, Sorts, Projections e Updates para habilitar maneiras simples e concisas de construir consultas.

O filtro a seguir encontra todas as instâncias Person em que o firstName começa com "G", classificados por lastName:

collection.find(regex("firstName", "^G")).sort(ascending("lastName")).printResults()

Este exemplo imprime as instâncias Person para "Gertrude", "George" e "Grace".

Existem muitos operadores de atualização suportados pelo MongoDB. Use os auxiliares Updates para ajudar a atualizar documentos em uma coleção.

A seguinte atualização corrige a hifenização para "Tim Berners-Lee":

collection.updateOne(equal("lastName", "Berners Lee"), set("lastName", "Berners-Lee"))
.printHeadResult("Update Result: ")

Os métodos de atualização retornam um UpdateResult, que fornece informações sobre a operação, incluindo o número de documentos modificados pela atualização.

Para excluir no máximo um único documento, ou nenhum se nenhum documento corresponder ao filtro, use o método deleteOne() :

collection.deleteOne(equal("firstName", "Zaphod")).printHeadResult("Delete Result: ")

Voltar

Início rápido