FAQ: MongoDB Fundamentals
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.
Quais plataformas o MongoDB suporta?
Para obter a lista de plataformas suportadas, consulte Suporte à Plataforma.
O MongoDB é oferecido como um serviço hospedado?
Sim. MongoDB Atlas é um banco de dados como serviço hospedado na nuvem. Para mais informações, visite MongoDB Atlas.
Como uma collection difere de uma tabela?
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.
Como crio um banco de dados e uma collection?
Observação
Você pode inserir os comandos mencionados nestas perguntas frequentes utilizando MongoDB Shell
. O MongoDB Shell é uma interface interativa em JavaScript para o MongoDB. Você pode usar o MongoDB Shell para consultar e atualizar dados, e também para realizar operações administrativas.
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 } );
O método
db.collection.insertOne()
cria a collectionmyNewCollection1
se ela ainda não existir.O método
db.collection.createIndex()
cria o índice e a collectionmyNewCollection2
se ela ainda não existir.Se o banco de dados
myNewDb
não existisse, o métododb.collection.createIndex()
ou o métododb.collection.insertOne()
teriam criado o banco de dadosmyNewDb
automaticamente.
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");
Como faço para definir ou alterar o esquema de collection?
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.
Observação
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.
O MongoDB suporta SQL?
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 coleções 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.
O MongoDB suporta transações?
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.
O MongoDB opera com cache?
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 o MongoDB aborda SQL ou injeção de query?
BSON
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.
JavaScript
Observação
Você pode desabilitar toda a execução do JavaScript do lado do servidor:
Para uma instância
mongod
, passando a opção--noscripting
na linha de comando ou definindosecurity.javascriptEnabled
como false no arquivo de configuração.Para uma instância
mongos
, passando a opção--noscripting
na linha de comando ou definindosecurity.javascriptEnabled
como false no arquivo de configuração.
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.