Um guia para o MongoDB com Java

Um guia para o MongoDB com Java

 

1. Visão geral

Neste artigo, daremos uma olhada na integração deMongoDB, um banco de dados de código aberto NoSQL muito popular com um cliente Java autônomo.

O MongoDB é escrito em C ++ e possui vários recursos sólidos, como redução de mapa, compartilhamento automático, replicação, alta disponibilidade etc.

2. MongoDB

Vamos começar com alguns pontos-chave sobre o próprio MongoDB:

  • armazena dados em documentos do tipoJSON que podem ter várias estruturas

  • usa esquemas dinâmicos, o que significa que podemos criar registros sem predefinir nada

  • a estrutura de um registro pode ser alterada simplesmente adicionando novos campos ou excluindo os existentes

O modelo de dados mencionado acima nos permite representar relacionamentos hierárquicos, armazenar matrizes e outras estruturas mais complexas facilmente.

3. Terminologias

A compreensão dos conceitos no MongoDB se tornará mais fácil se pudermos compará-los às estruturas de bancos de dados relacionais.

Vamos ver as analogias entre o Mongo e um sistema MySQL tradicional:

  • Table no MySQL se torna umCollection no Mongo

  • Row torna-se umDocument

  • Column torna-se umField

  • Joins são definidos como documentoslinkingeembedded

Essa é uma maneira simplista de analisar os principais conceitos do MongoDB, é claro, mas ainda assim útil.

Agora, vamos mergulhar na implementação para entender esse poderoso banco de dados.

4. Dependências do Maven

Precisamos começar definindo a dependência de um driver Java para MongoDB:


    org.mongodb
    mongo-java-driver
    3.4.1

Para verificar se alguma nova versão da biblioteca foi lançada -track the releases here.

5. UsandoMongoDB

Agora, vamos começar a implementar consultas Mongo com Java. Seguiremos com as operações básicas de CRUD, pois são as melhores para começar.

5.1. Faça uma conexão comMongoClient

Primeiro, vamos fazer uma conexão com um servidor MongoDB. Com a versão> = 2.10.0, usaremos oMongoClient:

MongoClient mongoClient = new MongoClient("localhost", 27017);

E para versões mais antigas, use a classeMongo:

Mongo mongo = new Mongo("localhost", 27017);

5.2. Conectando a um banco de dados

Agora, vamos nos conectar ao nosso banco de dados. É interessante notar que não precisamos criar um. Quando Mongo vê que o banco de dados não existe, ele o cria para nós:

DB database = mongoClient.getDB("myMongoDb");

Às vezes, por padrão, o MongoDB é executado no modo autenticado. Nesse caso, precisamos nos autenticar enquanto nos conectamos a um banco de dados.

Podemos fazê-lo conforme apresentado abaixo:

MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());

5.3. Mostrar bancos de dados existentes

Vamos exibir todos os bancos de dados existentes. Quando queremos usar a linha de comando, a sintaxe para mostrar os bancos de dados é semelhante ao MySQL:

show databases;

Em Java, exibimos bancos de dados usando o trecho abaixo:

mongoClient.getDatabaseNames().forEach(System.out::println);

A saída será:

local      0.000GB
myMongoDb  0.000GB

Acima,local é o banco de dados Mongo padrão.

5.4. Crie umCollection

Vamos começar criando umCollection (tabela equivalente para MongoDB) para nosso banco de dados. Assim que tivermos conectado ao nosso banco de dados, podemos fazer umCollection como:

database.createCollection("customers", null);

Agora, vamos exibir todas as coleções existentes para o banco de dados atual:

database.getCollectionNames().forEach(System.out::println);

A saída será:

customers

5.5. Salvar - Inserir

A operaçãosave tem semântica salvar ou atualizar: se umid estiver presente, ele executaupdate, se não - ele fazinsert.

Quando somossave um novo cliente:

DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "example");
collection.insert(document);

A entidade será inserida em um banco de dados:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

A seguir, veremos a mesma operação -save - com semânticaupdate.

5.6. Salvar - Atualizar

Vejamos agorasave com semânticaupdate, operando em um cliente existente:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "example"
}

Agora, quandosave o cliente existente - vamos atualizá-lo:

BasicDBObject query = new BasicDBObject();
query.put("name", "Shubham");

BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "John");

BasicDBObject updateObject = new BasicDBObject();
updateObject.put("$set", newDocument);

collection.update(query, updateObject);

O banco de dados ficará assim:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "John",
    "company" : "example"
}

Como você pode ver, neste exemplo específico,save usa a semântica deupdate, porque usamos objeto com_id fornecido.

5.7. Leia umDocument de umCollection

Vamos pesquisar umDocument em umCollection fazendo uma consulta:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

Ele mostrará os únicosDocument que temos até agora em nossoCollection:

[
    {
      "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
      "name" : "John",
      "company" : "example"
    }
]

5.8. Delete aDocument

Vamos avançar para nossa última operação CRUD, exclusão:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");

collection.remove(searchQuery);

Com o comando acima executado, nosso únicoDocument será removido deCollection.

6. Conclusão

Este artigo foi uma introdução rápida ao uso do MongoDB a partir de Java.

A implementação de todos esses exemplos e trechos de código pode ser encontradaover on GitHub - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.