Administración de una base de datos de MongoDB mediante JavaScript
SE APLICA A: MongoDB
El servidor de MongoDB en Azure Cosmos DB está disponible en los paquetes npm comunes para MongoDB como:
Nota:
Los fragmentos de código de ejemplo están disponibles en GitHub como un proyecto de JavaScript.
Documentación de referencia de API para MongoDB | paquete de MongoDB (npm)
Asignación de nombre a una base de datos
En Azure Cosmos DB, una base de datos es análoga a un espacio de nombres. Al crear una base de datos, el nombre de la base de datos forma un segmento del URI utilizado para acceder al recurso de base de datos y a los recursos secundarios.
Estas son algunas reglas rápidas de la asignación de un nombre a una base de datos:
Una vez creado, el URI de una base de datos tiene este formato:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Obtención de una instancia de base de datos
La base de datos contiene las colecciones y sus documentos. Use una instancia de la clase Db
para acceder a las bases de datos del servidor.
En los fragmentos de código siguientes se supone que ya ha creado la conexión cliente y que cierra dicha conexión después de estos fragmentos de código.
Obtención de información del servidor
Acceda a la clase Administrador para recuperar información del servidor. No es necesario especificar el nombre de la base de datos en el método db
. La información devuelta es específica de MongoDB y no representa la propia plataforma Azure Cosmos DB.
// 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`)}`);
El fragmento de código anterior muestra la salida de la consola de ejemplo siguiente:
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
¿Existe la base de datos?
El controlador de MongoDB nativo para JavaScript crea la base de datos si no existe al obtener acceso. Si prefiere saber si la base de datos ya existe antes de usarla, obtenga la lista de bases de datos actuales y filtre por el nombre:
// 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}`;
}
El fragmento de código anterior muestra la salida de la consola de ejemplo siguiente:
Database exists: adventureworks
Obtención de una lista de bases de datos, colecciones y un recuento de documentos
Al administrar el servidor de MongoDB mediante programación, resulta útil saber qué bases de datos y colecciones hay en el servidor y cuántos documentos hay en cada colección.
- 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`);
}
}
El fragmento de código anterior muestra la salida de la consola de ejemplo siguiente:
Databases:
adventureworks
Collections:
products: 1 doc(s)
oldmain
Collections:
central: 0 doc(s)
done
Obtención de una instancia de objeto de base de datos
Para obtener una instancia de objeto de base de datos, llame al método siguiente. Este método acepta un nombre de base de datos opcional y puede formar parte de una cadena.
Una base de datos se crea cuando se accede a ella. La forma más común de acceder a una nueva base de datos es agregar un documento a una colección. En una línea de código mediante objetos encadenados, se crean la base de datos, la colección y la documentación.
const insertOneResult = await client.db("adventureworks").collection("products").insertOne(doc);
Obtenga más información sobre cómo trabajar con colecciones y documentos.
Quitar una base de datos
Se quita una base de datos del servidor mediante el método dropDatabase en la clase 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)}`);
El fragmento de código anterior muestra la salida de la consola de ejemplo siguiente:
Drop database: true
done