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

Bancos de dados e coleções

Nesta página

  • Visão geral
  • Acessar um banco de dados
  • Acessar uma coleção
  • Criar uma coleção
  • Obter uma lista de coleções
  • Excluir uma coleção
  • Configurar operações de leitura e escrita
  • Conjuntos de tags
  • LocalThreshold
  • Documentação da API

Neste guia, você aprenderá a interagir com bancos de dados e coleções do MongoDB usando o driver Scala.

O MongoDB organiza os dados em uma hierarquia dos seguintes níveis:

  • Bancos de dados: Estruturas de dados de nível superior em um MongoDB deployment que armazenam collections.

  • Collections: grupos de documentos do MongoDB . Elas são análogas às tabelas do banco de dados relacional.

  • Documentos: unidades que armazenam dados literais, como string, números, datas e outros documentos incorporados. Para obter mais informações sobre os tipos e estrutura de campo de documento , consulte o guia Documentos no manual do MongoDB Server .

Acesse um banco de dados chamando o método getDatabase() em uma instância do MongoClient.

O exemplo a seguir acessa um banco de dados denominado "test_database" :

val database = mongoClient.getDatabase("test_database")

Acesse uma coleção ligando para o método getCollection() em uma instância MongoDatabase.

O exemplo a seguir acessa uma coleção denominada "test_collection":

val collection = database.getCollection("test_collection")

Dica

Se o nome da coleção fornecido ainda não existir no banco de dados, o MongoDB criará implicitamente a coleção quando você inserir os dados pela primeira vez nela.

Utilize o método createCollection() em uma instância do MongoDatabase para criar explicitamente uma coleção em um banco de dados.

O exemplo a seguir cria uma collection chamada "example_collection":

val createObservable = database.createCollection("example_collection")
Await.result(createObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

Você pode especificar opções de collection, como tamanho máximo e regras de validação de documento , passando uma CreateCollectionOptions instância para o createCollection() método. Para obter uma lista completa dos parâmetros opcionais, consulte a documentação do comando create no manual do MongoDB Server .

Você pode executar query de uma lista de coleções em um banco de dados ligando para o método listCollections() de uma instância MongoDatabase.

O exemplo a seguir lista todas as coleções em um banco de dados:

val results = Await.result(database.listCollections().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
Iterable((name,BsonString{value='test_collection'}), (type,BsonString{value='collection'}), ... )
Iterable((name,BsonString{value='example_collection'}), (type,BsonString{value='collection'}), ... )

Para executar query somente dos nomes das collections no banco de dados, chame o método listCollectionNames() da seguinte forma:

val results = Await.result(database.listCollectionNames().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
test_collection
example_collection

Dica

Para obter mais informações sobre a iteração em uma Future instância, consulte Usar futuros para recuperar todos os resultados no guia Access data from an Observable.

Você pode excluir uma coleção chamando o método drop() em uma instância MongoCollection.

O exemplo a seguir exclui a collection "test_collection" :

val deleteObservable = database.getCollection("test_collection").drop()
Await.result(deleteObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

Aviso

Eliminar uma coleção exclui todos os dados da coleção

Descartar uma collection do seu banco de dados exclui permanentemente todos os documentos e todos os índices dessa collection.

Solte uma coleção somente se os dados nela não forem mais necessários.

Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.

Por padrão, os bancos de dados herdam essas configurações da instância MongoClient e as collections as herdam do banco de dados. No entanto, você pode alterar essas configurações em seu banco de dados usando o método withReadPreference().

O exemplo a seguir acessa um banco de dados enquanto especifica a preferência de leitura do banco de dados como secondary:

val databaseWithReadPrefs =
mongoClient.getDatabase("test_database").withReadPreference(ReadPreference.secondary())

Você também pode alterar as configurações de leitura e escrita em suas collections usando o método withReadPreference(). O exemplo a seguir mostra como acessar uma coleção especificando a preferência de leitura da coleção como secondary:

val collectionWithReadPrefs =
database.getCollection("test_collection").withReadPreference(ReadPreference.secondary())

Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :

No MongoDB Server, você pode aplicar marcações de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério de sua escolha. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.

Por padrão, o driver Scala ignora as tags ao escolher um membro para ler. Para instruir o driver Scala a preferir determinadas tags, passe uma instância TagSet para o construtor ReadPreference e, em seguida, passe a instância ReadPreference para o MongoClientSettings que você usa para instanciar um MongoClient.

No exemplo de código a seguir, o conjunto de tags passado para o construtor ReadPreference instrui o driver Scala a preferir leituras do centro de dados de Nova York ('dc': 'ny') e a voltar para o centro de dados de São Francisco ('dc': 'sf'):

val tag1 = new Tag("dc", "ny")
val tag2 = new Tag("dc", "sf")
val tagSet = new TagSet(List(tag1, tag2).asJava)
val connectionString = ConnectionString("<connection string URI>")
val readPreference = ReadPreference.primaryPreferred(tagSet)
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.readPreference(readPreference)
.build()
val clientWithTags = MongoClient(mongoClientSettings)

Se vários membros do conjunto de réplicas corresponderem à preferência de leitura e aos conjuntos de tags especificados, o driver Scala lerá a partir dos membros do conjunto de réplicas mais próximos, escolhidos de acordo com o tempo de ping .

Por padrão, o driver usa somente os membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, use o método localThreshold() dentro do bloco ClusterSettings.Builder fornecido pelo método applyToClusterSettings() da classe MongoClientSettings.Builder . Como alternativa, inclua o parâmetro localThresholdMS no URI da string de conexão .

O exemplo a seguir se conecta a uma MongoDB deployment em execução no localhost:27017 e especifica um limite local de 35 milissegundos:

val connectionString = ConnectionString("mongodb://localhost:27017")
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.applyToClusterSettings(builder => builder.localThreshold(35, TimeUnit.MILLISECONDS))
.build()
val client = MongoClient(mongoClientSettings)

No exemplo anterior, o driver Scala distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.

Para saber mais sobre qualquer um dos tipos ou métodos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Configurar TLS