Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Perguntas frequentes: Fundamentos do MongoDB

Nesta página

  • Quais plataformas o MongoDB suporta?
  • O MongoDB é oferecido como um serviço hospedado?
  • Como uma collection difere de uma tabela?
  • Como crio um banco de dados e uma collection?
  • Como faço para definir ou alterar o esquema de collection?
  • O MongoDB suporta SQL?
  • O MongoDB suporta transações?
  • O MongoDB opera com cache?
  • Como o MongoDB aborda SQL ou injeção de query?

Este documento responde a algumas perguntas frequentes sobre o MongoDB.

Para obter a lista de plataformas suportadas, consulte Suporte à Plataforma.

Sim. MongoDB Atlas é um banco de dados como serviço hospedado na nuvem. Para obter mais informações, acesse MongoDB Atlas.

Em vez de tabelas, um banco de dados MongoDB armazena seus dados em collections. Uma collection contém um ou mais documentos BSON. Os documentos são análogos a registros ou linhas em uma tabela do banco de dados relacional. Cada documento tem um ou mais campos; os campos são semelhantes às colunas em uma tabela de banco de dados relacional.

Dica

Veja também:

Observação

Se um banco de dados não existir, o MongoDB criará o banco de dados quando você armazenar os dados pela primeira vez para esse banco de dados.

Se uma coleção não existir, o MongoDB criará a coleção quando você armazenar dados para essa coleção pela primeira vez.

Dessa forma, você pode alternar para um banco de dados inexistente (use <dbname>) e executar a seguinte operação:

use myNewDB;
db.myNewCollection1.insertOne( { x: 1 } );
db.myNewCollection2.createIndex( { a: 1 } );

Você também pode criar uma collection explicitamente usando o método db.createCollection() se quiser especificar opções específicas, como tamanho máximo ou regras de validação de documentos:

use myNewDB;
db.createCollection("myNewCollection1");

Você não precisa especificar um esquema para uma coleta no MongoDB. Embora seja comum que os documentos de um acervo tenham um estrutura amplamente homogênea, não é um requisito; ou seja, documentos em uma única coleta não precisam ter o mesmo conjunto de campos. O o tipo de dados de um campo pode diferir entre os documentos em uma coleta, pois bem.

Para alterar a estrutura dos documentos em uma coleta, atualize os documentos para a nova estrutura. Por exemplo, adicionar novos campos, remover campos existentes ou atualizar o valor de um campo para um novo tipo.

Alterado na versão 3.2: A partir do MongoDB 3.2, no entanto, você pode impor regras de validação de documentos para uma coleção durante as operações de atualização e inserção.

Algumas propriedades de collection, como especificar um tamanho máximo, podem ser especificadas durante a criação explícita de uma collection e modificadas. Consulte db.createCollection() e collMod. Se você não estiver especificando essas propriedades, não será necessário criar explicitamente a collection, pois o MongoDB cria novas collections quando você armazena dados para as collections pela primeira vez.

Não diretamente, não. No entanto, o MongoDB oferece suporte a uma rica linguagem de query própria. Para obter exemplos sobre como usar a query do MongoDB, consulte CRUD do MongoDB

Você também pode usar o Conector MongoDB para BI para consultar collections MongoDB com SQL.

Se você estiver considerando migrar seu aplicativo SQL para o MongoDB, baixe o Guia de Modernização de Aplicativos do MongoDB para obter um guia de migração de práticas recomendadas, esquema de referência e outros recursos úteis.

Porque um único documento pode conter dados relacionados que, de outra forma ser modelado em tabelas pai-filho separadas em um esquema relacional, as operações atômicas de documento único do MongoDB já fornecem semântica de transações que atende às necessidades de integridade de dados da maioria dos aplicativos. Um ou mais campos podem ser escritos em uma única operação, incluindo em vários subdocumentos e elementos de uma array. As garantias fornecidas pelo MongoDB garantem o isolamento completo como o documento é atualizado; qualquer erro faz com que a operação seja revertida eque os clientes recebam uma visão consistente do documento.

Para situações que exigem atomicidade de leituras e escritos em vários documentos (em uma única coleção ou várias coleções), o MongoDB suporta transações distribuídas, incluindo transações em conjuntos de réplicas e clusters fragmentados.

Para obter mais informações, consulte transações.

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

Sim. O MongoDB mantém os dados usados mais recentemente na RAM. Se você criou índices para suas consultas e seu conjunto de dados de trabalho cabe na RAM, o MongoDB atende a todas as consultas a partir da memória.

O MongoDB não armazena em cache os resultados da consulta para retornar os resultados em cache para consultas idênticas.

Para obter mais informações sobre MongoDB e uso de memória, consulte WiredTiger e Uso de Memória.

Como um programa de cliente monta uma consulta no MongoDB, ele cria um objeto BSON, não uma string. Portanto, os ataques tradicionais de injeção de SQL não são problema. Mais detalhes e algumas nuances são abordados abaixo.

O MongoDB representa queries como objetos BSON . Normalmente , as bibliotecas de clientes oferecem um processo conveniente e livre de injeções para criar esses objetos. Considere o seguinte exemplo C++:

BSONObj my_query = BSON( "name" << a_name );
auto_ptr<DBClientCursor> cursor = c.query("tutorial.persons", my_query);

Aqui, my_query então terá um valor como { name : "Joe" }. Se my_query continha caracteres especiais, por exemplo ,, : e {, a query simplesmente não corresponderia a nenhum documento. Por exemplo, os usuários não podem sequestrar uma query e convertê-la em uma exclusão.

Observação

Você pode desabilitar toda a execução do JavaScript do lado do servidor:

As seguintes operações MongoDB permitem que você execute expressões JavaScript arbitrárias diretamente no servidor:

Você deve se preocupar com esses casos para evitar que os usuários enviem JavaScript maliciosos.

Felizmente, você pode expressar a maioria das operações no MongoDB sem JavaScript.

← Perguntas frequentes