使用 JavaScript 管理 MongoDB 数据库

适用对象: MongoDB

Azure Cosmos DB 中的 MongoDB 服务器可从适用于 MongoDB 的常见 npm 包获取,例如:

注意

示例代码片段在 GitHub 上作为 JavaScript 项目提供。

MongoDB API 参考文档 | MongoDB 包 (npm)

为数据库命名

在 Azure Cosmos DB 中,数据库类似于命名空间。 创建数据库时,数据库名称会形成用于访问数据库资源和任何子资源的 URI 段。

下面是命名数据库时的一些快速规则:

  • 数据库名称长度必须介于 3 到 63 个字符之间
  • 数据库名称只能包含小写字母、数字或短划线 (-) 字符。
  • 数据库名称必须以小写字母或数字开头。

创建后,数据库的 URI 采用以下格式:

https://<cosmos-account-name>.documents.azure.cn/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

另请参阅