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:

  • La lunghezza del nome del database deve essere compresa tra 3 e 63 caratteri.
  • Il nome del database può contenere solo lettere minuscole, numeri o trattini (-).
  • Il nome del database deve iniziare con una lettera minuscola o un numero.

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.

// 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

Vedi anche