JavaScript を使用して MongoDB データベースを管理する
適用対象: MongoDB
Azure Cosmos DB の MongoDB サーバーは、次のような MongoDB 用の一般的な npm パッケージから入手できます。
Note
コード スニペットの例は、JavaScript プロジェクトとして GitHub で入手できます。
MongoDB 用 API リファレンス ドキュメント | 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
データベース オブジェクトのインスタンスを取得する
データベース オブジェクトのインスタンスを取得するには、次のメソッドを呼び出します。 このメソッドは、省略可能なデータベース名を受け取り、チェーンの一部にすることができます。
データベースは、アクセスされた時点で作成されます。 新しいデータベースにアクセスする最も一般的な方法は、コレクションにドキュメントを追加することです。 チェーンされたオブジェクトを使用する 1 行のコードで、データベース、コレクション、ドキュメントが作成されます。
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