Share via


使用 JavaScript 管理 MongoDB 資料庫

適用於: MongoDB

Azure Cosmos DB 中的 MongoDB 伺服器可以從適用於 MongoDB 的常見 npm 套件取得,例如:

注意

範例程式碼片段可在 GitHub 上以 JavaScript 專案形式取得。

API for MongoDB 參考文件 | MongoDB 套件 (npm)

命名資料庫

在 Azure Cosmos DB 中,資料庫類似於命名空間。 當您建立資料庫時,資料庫名稱會成為存取資料庫資源和任何子資源的 URI 區段。

以下是命名資料庫時的一些快速規則:

  • 資料庫名稱長度應為 3 到 63 個字元
  • 資料庫名稱只能包含小寫字母、數字或虛線 (-) 字元。
  • 資料庫名稱必須以小寫字母或數字開頭。

建立之後,資料庫的 URI 格式如下:

https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>

取得資料庫執行個體

資料庫會保存集合及其文件。 使用 Db 類別的執行個體來存取伺服器上的資料庫。

下列程式碼片段假設您已建立用戶端連線,而且您已在這些程式碼片段之後關閉用戶端連線

取得伺服器資訊

存取 Admin 類別以擷取伺服器資訊。 您不需要在 db 方法中指定資料庫名稱。 傳回的資訊專屬於 MongoDB,且不代表 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`)}`);

上述程式碼片段會顯示下列範例主控台輸出:

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

資料庫是否存在?

適用於 JavaScript 的原生 MongoDB 驅動程式會在您存取時建立資料庫 (如果不存在)。 如果您想要在使用前先知道資料庫是否已經存在,請先取得目前資料庫的清單,並篩選名稱:

// 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}`;
}

上述程式碼片段會顯示下列範例主控台輸出:

Database exists:        adventureworks

取得資料庫、集合和文件計數的清單

當您以程式設計方式管理 MongoDB 伺服器時,知道伺服器上的資料庫和集合,以及每個集合中的文件數目很有幫助。

// 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`);
  }
}

上述程式碼片段會顯示下列範例主控台輸出:

Databases:

        adventureworks


                Collections:

                        products: 1 doc(s)

        oldmain


                Collections:

                        central: 0 doc(s)

done

取得資料庫物件執行個體

若要取得資料庫物件執行個體,請呼叫下列方法。 這個方法會接受選擇性的資料庫名稱,而且可以是鏈結的一部分。

存取時建立資料庫。 存取新資料庫最常見的方式是將文件新增至集合。 在使用鏈結物件的一行程式碼中,會建立資料庫、集合和文件。

const insertOneResult = await client.db("adventureworks").collection("products").insertOne(doc);

深入了解如何使用集合和文件。

卸除資料庫

使用 DB 類別上的 dropDatabase 方法,從伺服器中移除資料庫。

// Drop a database, removing it permanently from the server.
const dropDatabase = await client.db("adventureworks").dropDatabase();
console.log(`Drop database:\t${JSON.stringify(dropDatabase)}`);

上述程式碼片段會顯示下列範例主控台輸出:

Drop database:  true
done

另請參閱