Gerenciar um banco de dados MongoDB usando o JavaScript
APLICA-SE AO: MongoDB
O servidor MongoDB no Azure Cosmos DB está disponível nos pacotes de npm comuns para MongoDB, como:
Observação
Os snippets de código de exemplo estão disponíveis no GitHub como um projeto JavaScript.
Documentação de referência da API for MongoDB | Pacote do MongoDB (npm)
Nomear um banco de dados
No Azure Cosmos DB, um banco de dados é análogo a um namespace. Quando você cria um banco de dados, o nome do banco de dados forma um segmento do URI usado para acessar o recurso de banco de dados e todos os recursos filho.
Aqui estão algumas regras rápidas ao nomear um banco de dados:
Depois de criado, o URI de um banco de dados estará nesse formato:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Obter instância de banco de dados
O banco de dados contém as coleções e os respectivos documentos. Use uma instância da classe Db
para acessar os bancos de dados no servidor.
Os snippets de código a seguir pressupõem que você já criou a conexão do cliente e que fechará a conexão do cliente após esses snippets de código.
Obter informações do servidor
Acesse a classe Administrador para recuperar as informações do servidor. Você não precisa especificar o nome do banco de dados no método db
. As informações retornadas são específicas para o MongoDB e não representam a plataforma do Azure Cosmos DB em si.
// Get server build info
const serverInfo = await client.db().admin().serverInfo();
console.log(`Server info:\n${Object.keys(serverInfo).map(key => `\t${key}: ${serverInfo[key]}\n`)}`);
// Get server status
const serverStatus = await client.db().admin().serverStatus();
console.log(`Server status:\n${Object.keys(serverStatus).map(key => `\t${key}: ${serverStatus[key]}\n`)}`);
// List all databases
const dbListResult = await client.db().admin().listDatabases();
console.log(`Databases:\n${dbListResult.databases.map(db => `\t${db.name}\n`)}`);
O snippet de código anterior exibe a seguinte saída de console de exemplo:
Server info:
version: 4.0.0
, versionArray: 4,0,0,0
, bits: 64
, maxBsonObjectSize: 16777216
, ok: 1
Server status:
ok: 1
Databases:
adventureworks
, oldmain
done
O banco de dados existe?
O driver do MongoDB nativo para JavaScript criará o banco de dados, se ele não existir quando você acessá-lo. Se você preferir saber se o banco de dados já existe, antes de usá-lo, obtenha a lista de bancos de dados atuais e filtre o nome:
// Get list of databases
const listResult = await client.db().admin().listDatabases();
if(listResult.databases.length === 0) {
return 'No databases found';
}
// does database exist
const lookForDatabase = 'adventureworks';
const dbFound = listResult.databases.find(db => db.name===lookForDatabase).toArray();
if(dbFound) {
return `Database exists:\t${lookForDatabase}`;
}
O snippet de código anterior exibe a seguinte saída de console de exemplo:
Database exists: adventureworks
Obter lista de bancos de dados, coleções e contagem de documentos
Quando você gerencia o servidor MongoDB programaticamente, é útil saber quais bancos de dados e coleções estão no servidor e quantos documentos existem em cada coleção.
- MongoClient.Db.Admin.listDatabases
- MongoClient.Db.listCollections
- MongoClient.Db.Collection
- MongoClient.Db.Collection.countDocuments
// get list of databases
const listResult = await client.db().admin().listDatabases();
console.log("Databases:\n");
// loop through databases
for await (let database of listResult.databases) {
console.log(`\t${database.name}\n`);
// get database client
const dbClient = client.db(database.name);
// get collections in database
const collections = await dbClient.listCollections();
console.log("\n\t\tCollections:\n");
// loop through collections
for await (let collection of collections) {
// get collection client
const collectionClient = dbClient.collection(collection.name);
// get doc count of collection
const docCount = await collectionClient.countDocuments({});
console.log(`\t\t\t${collection.name}: ${docCount} doc(s)\n`);
}
}
O snippet de código anterior exibe a seguinte saída de console de exemplo:
Databases:
adventureworks
Collections:
products: 1 doc(s)
oldmain
Collections:
central: 0 doc(s)
done
Obter instância de objeto de banco de dados
Para obter uma instância de objeto de banco de dados, chame o método a seguir. Esse método aceita um nome de banco de dados opcional e pode fazer parte de uma cadeia.
Um banco de dados é criado quando ele é acessado. A maneira mais comum de acessar um novo banco de dados é adicionar um documento a uma coleção. Em uma linha de código usando objetos encadeados, o banco de dados, a coleção e o documento são criados.
const insertOneResult = await client.db("adventureworks").collection("products").insertOne(doc);
Saiba mais sobre como trabalhar com coleções e documentos.
Remover um banco de dados
Um banco de dados é removido do servidor usando o método dropDatabase na classe DB.
// Drop a database, removing it permanently from the server.
const dropDatabase = await client.db("adventureworks").dropDatabase();
console.log(`Drop database:\t${JSON.stringify(dropDatabase)}`);
O snippet de código anterior exibe a seguinte saída de console de exemplo:
Drop database: true
done