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
Visão geral
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 case, você permite o acesso à chave primária.
Configurar classes de caso
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 banco de dados :
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.
Inserir uma pessoa
Com o MongoCollection
configurado corretamente, inserir Person
instâncias na coleção é simples:
val person: Person = Person("Ada", "Lovelace") collection.insertOne(person).results()
Inserir instâncias de várias pessoas
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
Consultando a coleção
Utilize o método find()
para consultar uma collection.
Encontre a primeira pessoa correspondente
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)
Retornar todos os documentos
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()
Recuperar uma pessoa usando um filtro de query
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.
Encontre instâncias de pessoa correspondentes
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"
.
Atualize documentos
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.
Exclua documentos
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: ")