使用 JavaScript 管理 MongoDB 資料庫
適用於: MongoDB
Azure Cosmos DB 中的 MongoDB 伺服器可以從適用於 MongoDB 的常見 npm 套件取得,例如:
注意
範例程式碼片段可在 GitHub 上以 JavaScript 專案形式取得。
API for MongoDB 參考文件 | MongoDB 套件 (npm)
命名資料庫
在 Azure Cosmos DB 中,資料庫類似於命名空間。 當您建立資料庫時,資料庫名稱會成為存取資料庫資源和任何子資源的 URI 區段。
以下是命名資料庫時的一些快速規則:
建立之後,資料庫的 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 伺服器時,知道伺服器上的資料庫和集合,以及每個集合中的文件數目很有幫助。
- 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`);
}
}
上述程式碼片段會顯示下列範例主控台輸出:
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