Gestire un database MongoDB con JavaScript
SI APPLICA A: MongoDB
Il server MongoDB in Azure Cosmos DB è disponibile dai pacchetti npm comuni per MongoDB, ad esempio:
Nota
I frammenti di codice di esempio sono disponibili in GitHub come progetto JavaScript.
Documentazione di riferimento dell'API per MongoDB | Pacchetto MongoDB (npm)
Assegnare un nome a un database
In Azure Cosmos DB, un database è analogo a uno spazio dei nomi. Quando si crea un database, il nome del database costituisce un segmento dell'URI usato per accedere alla risorsa di database e alle risorse figlio.
Ecco alcune regole rapide per la denominazione di un database:
Dopo la creazione, l'URI per un database è in questo formato:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Ottenere un'istanza del database
Il database contiene le raccolte e i relativi documenti. Usare un'istanza della classe Db
per accedere ai database nel server.
I frammenti di codice seguenti presuppongono che sia già stata creata la connessione client e che si chiuda la connessione client dopo questi frammenti di codice.
Ottenere le informazioni sul server
Accedere alla classe Admin per ottenere le informazioni sul server. Non è necessario specificare il nome del database nel metodo db
. Le informazioni restituite sono specifiche di MongoDB e non rappresentano la piattaforma Azure Cosmos DB stessa.
// 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`)}`);
Il frammento di codice precedente visualizza l'output della console di esempio seguente:
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
Il database esiste?
Il driver MongoDB nativo per JavaScript crea un database se non esiste quando si accede. Se si preferisce sapere se il database esiste già prima di usarlo, ottenere l'elenco dei database correnti e filtrare in base al 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}`;
}
Il frammento di codice precedente visualizza l'output della console di esempio seguente:
Database exists: adventureworks
Ottenere l'elenco di database, raccolte e il numero di documenti
Quando si gestisce il server MongoDB a livello di codice, è utile conoscere i database e le raccolte presenti nel server e il numero di documenti in ogni raccolta.
- 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`);
}
}
Il frammento di codice precedente visualizza l'output della console di esempio seguente:
Databases:
adventureworks
Collections:
products: 1 doc(s)
oldmain
Collections:
central: 0 doc(s)
done
Ottenere un'istanza dell'oggetto di database
Per ottenere un'istanza dell'oggetto di database, chiamare il metodo seguente. Questo metodo accetta un nome di database facoltativo e può far parte di una catena.
Quando si accede a questo metodo viene creato un database. Il modo più comune per accedere a un nuovo database consiste nell'aggiungere un documento a una raccolta. In una riga di codice che usa oggetti concatenati vengono creati il database, la raccolta e il documento.
const insertOneResult = await client.db("adventureworks").collection("products").insertOne(doc);
Altre informazioni sull'uso di raccolte e documenti.
Eliminare un database
Un database viene rimosso dal server usando il metodo dropDatabase sulla 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)}`);
Il frammento di codice precedente visualizza l'output della console di esempio seguente:
Drop database: true
done