今天,将向您介绍如何开始用MongoDB与Node.js结合使用的基础知识。在文章中我们将通过Node.js脚本连接到MongoDB数据库,检索数据库列表,并将结果显示到控制台。
设定
在开始之前,我们需要确保您已完成一些必备步骤。
安装Node.js
首先,确保安装了受支持的Node.js版本(MongoDB Node.js驱动程序需要Node 4.x或更高版本,对于这些示例,我使用了Node.js 10.16.3)。
安装MongoDB Node.js驱动程序
MongoDB Node.js驱动程序使您可以轻松地从Node.js应用程序中与MongoDB数据库进行交互。您需要驱动程序才能连接到数据库并执行本快速入门系列中描述的查询。
如果未安装MongoDB Node.js驱动程序,则可以使用以下命令进行安装。
npm install mongodb
在撰写本文时,此驱动程序的安装版本为3.3.2。正在运行npm list mongodb将显示当前安装的驱动程序版本号。
创建一个免费的MongoDB Atlas集群并加载示例数据
接下来,您将需要一个MongoDB数据库。您的数据库将存储在集群内部。在较高级别上,集群是将存储数据库副本的一组节点。
入门MongoDB的最简单方法是使用MongoDB的完全托管数据库即服务Atlas。 前往Atlas并在免费层中创建一个新集群。创建层后,加载示例数据。
立即开始使用Atlas上的M0集群。它是永久免费的,并且是尝试本博客系列中的步骤的最简单方法。
获取集群的连接信息
最后一步是准备群集进行连接。
在Atlas中,导航到您的集群,然后单击CONNECT。群集连接向导将出现。
向导将提示您将当前IP地址列入白名单,并创建MongoDB用户(如果尚未这样做)。确保记下用于新MongoDB用户的用户名和密码,因为在以后的步骤中将需要它们。
接下来,向导将提示您选择一种连接方法。选择“ 连接您的应用程序”。当向导提示您选择驱动程序版本时,请选择Node.js和3.0或更高版本。复制提供的连接字符串。
有关如何访问连接向导并完成上述步骤的更多详细信息,请参阅官方文档。
从Node.js应用程序连接到数据库
现在一切都已经设置好了,是时候编写代码了!让我们编写一个连接到数据库并列出集群中数据库的Node.js脚本。
导入MongoClient
MongoDB模块export MongoClient,这就是我们用来连接到MongoDB数据库的东西。我们可以使用MongoClient的实例连接到集群,访问该集群中的数据库,然后关闭与该集群的连接。
const {MongoClient} = require('mongodb');
创建我们的主要功能
让我们创建一个异步函数,命名为main()我们将连接到MongoDB集群,调用查询数据库并与集群断开连接的函数。
我们需要做的第一件事main()是为我们的连接URI创建一个常量。连接URI是您在上一部分的Atlas中复制的连接字符串。粘贴连接字符串时,请不要忘记进行更新
/**
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
* See https://docs.mongodb.com/ecosystem/drivers/node/ for more details
*/
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";
现在我们有了URI,我们可以创建MongoClient的实例。
const client = new MongoClient(uri);
注意: 运行此代码时,您可能会在URL字符串解析器以及服务器发现和监视引擎周围看到DeprecationWarnings。如果看到这些警告,则可以通过将选项传递给MongoClient来删除它们。
现在,我们准备使用MongoClient连接到我们的集群。 client.connect()将兑现承诺。调用时,我们将使用await关键字client.connect()指示应阻止进一步执行,直到该操作完成为止。
await client.connect();
现在,我们准备与数据库进行交互。让我们构建一个函数,以显示该集群中数据库的名称。在命名函数中包含此逻辑通常很有用,以提高代码库的可读性。在本系列中,我们将学习与如何编写不同类型的查询类似的功能,来创建与此处创建的功能相似的新功能。现在,让我们调用一个名为的函数listDatabases()。
await listDatabases(client);
让我们在一个try/catch语句中包装对与数据库交互的函数的调用,以便我们处理所有意外错误。
try {
await client.connect();
await listDatabases(client);
} catch (e) {
console.error(e);
}
我们要确保关闭与集群的连接,因此我们将以try/catch一条finally语句结束。
finally {
await client.close();
}
一旦我们main()编写了函数,就需要调用它。让我们将错误发送到控制台。
main().catch(console.err);
放在一起,我们的main()函数和对其的调用将类似于以下内容。
async function main(){
/**
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
* See https://docs.mongodb.com/ecosystem/drivers/node/ for more details
*/
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);
try {
// Connect to the MongoDB cluster
await client.connect();
// Make the appropriate DB calls
await listDatabases(client);
} catch (e) {
console.error(e);
} finally {
await client.close();
}
}
main().catch(console.err);
列出集群中的数据库
在上一节中,我们引用了该listDatabases()函数。让我们实现它!
此功能将检索集群中数据库的列表,并在控制台中显示结果。
async function listDatabases(client){
databasesList = await client.db().admin().listDatabases();
console.log("Databases:");
databasesList.databases.forEach(db => console.log(` - ${db.name}`));
};
保存文件
您已经实现了很多代码。保存所做的更改,然后将文件命名为connection.js。
执行您的Node.js脚本
现在您可以测试代码了!通过在终端中运行以下命令来执行脚本: node connection.js
您将看到如下输出:
Databases:
- sample_airbnb
- sample_geospatial
- sample_mflix
- sample_supplies
- sample_training
- sample_weatherdata
- admin
- local
今天,您已经能够从Node.js脚本连接到MongoDB数据库,检索集群中的数据库列表,并在控制台中查看结果。




