Node.js MongoDB 教程及示例
几乎所有现代 Web 应用程序的后端都有某种数据存储系统。例如,以一个购物应用程序为例,诸如商品价格之类的数据会存储在数据库中。
Node.js 框架可以同时使用关系型数据库(如 Oracle 和 MS SQL Server)和非关系型数据库(如 MongoDB)。在本教程中,我们将了解如何在 Node.js 应用程序中使用数据库。
Node.js 和 NoSQL 数据库
多年来,像 MongoDB 和 MySQL 这样的 NoSQL 数据库作为数据存储数据库变得相当流行。这些数据库能够存储任何类型的内容,特别是任何格式,这是它们如此出名的原因。
Node.js 能够同时与 MySQL 和 MongoDB 数据库配合使用。要使用任一数据库,您需要使用 Node 包管理器下载并使用所需的模块。
对于 MySQL,所需的模块称为“mysql”;对于使用 MongoDB,需要安装的模块是“Mongoose”。
借助这些模块,您可以在 Node.js 中执行以下操作:
- 管理连接池 – 在这里,您可以指定 Node.js 应该维护和保存的 MySQL 数据库连接数。
- 创建和关闭与数据库的连接。在这两种情况下,您都可以提供一个回调函数,该函数可以在“创建”和“关闭”连接方法执行时调用。
- 可以执行查询以从相应的数据库中获取数据以检索数据。
- 还可以使用这些模块实现数据操作,例如插入、删除和更新数据。
在其余主题中,我们将探讨如何在 Node.js 中使用 MongoDB 数据库。
使用 MongoDB 和 Node.js
正如在之前的主题中所讨论的,MongoDB 是与 Node.js 结合使用的最流行的数据库之一。
在本章中,我们将看到
如何建立与 MongoDB 数据库的连接
如何执行从数据库读取数据以及在 MongoDB 数据库中插入、删除和更新记录的常规操作。
在本章中,我们假设已准备好以下 MongoDB 数据。
数据库名称:EmployeeDB
集合名称:Employee
Documents { {Employeeid : 1, Employee Name : Guru99}, {Employeeid : 2, Employee Name : Joe}, {Employeeid : 3, Employee Name : Martin}, }
- 安装 NPM 模块
您需要一个驱动程序才能从 Node 应用程序访问 Mongo。有许多 Mongo 驱动程序可用,但 MongoDB 是其中最受欢迎的之一。要安装 MongoDB 模块,请运行以下命令:
npm install mongodb
- 创建和关闭与 MongoDB 数据库的连接。下面的代码片段展示了如何创建和关闭与 MongoDB 数据库的连接。
代码解释
- 第一步是包含 mongoose 模块,这通过 require 函数完成。一旦有了这个模块,我们就可以使用该模块中可用的必要函数来创建数据库连接。
- 接下来,我们指定连接到数据库的连接字符串。在连接字符串中,有 3 个关键值被传递。
- 第一个是“mongodb”,它指定我们正在连接到 MongoDB 数据库。
- 下一个是“localhost”,表示我们正在连接到本地计算机上的数据库。
- 下一个是“EmployeeDB”,这是我们在 MongoDB 数据库中定义的数据库名称。
- 下一步是实际连接到我们的数据库。connect 函数接受我们的 URL,并提供指定回调函数的功能。连接打开到数据库时会调用该回调函数。这为我们提供了了解数据库连接是否成功机会。
- 在此函数中,我们将字符串“Connection established”写入控制台,以表明已成功创建连接。
- 最后,我们使用 db.close 语句关闭连接。
如果上述代码执行正确,控制台将显示字符串“Connected”,如下所示。
- 查询 MongoDB 数据库中的数据 – 使用 MongoDB 驱动程序,我们还可以从 MongoDB 数据库中获取数据。下面的部分将展示我们如何使用驱动程序从我们 EmployeeDB 数据库中的 Employee 集合中获取所有文档。这是我们 MongoDB 数据库中的集合,其中包含所有员工相关文档。每个文档都有一个对象 ID、员工姓名和员工 ID 来定义文档的值。
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); cursor.each(function(err, doc) { console.log(doc); }); });
代码解释
- 第一步,我们创建一个游标(游标是指向从数据库获取的各种记录的指针。然后使用游标遍历数据库中的不同记录。在这里,我们定义一个名为 cursor 的变量,它将用于存储从数据库获取的记录的指针),该游标指向从 MongoDB 集合中获取的记录。我们还可以指定要从中获取记录的集合“Employee”。find() 函数用于指定我们要从 MongoDB 集合中检索所有文档。
- 我们现在正在遍历我们的游标,并且对于游标中的每个文档,我们将执行一个函数。
- 我们的函数将简单地将每个文档的内容打印到控制台。
注意: – 也可以从数据库中获取特定记录。这可以通过在 find() 函数中指定搜索条件来完成。例如,假设您只想获取员工姓名为 Guru99 的记录,那么此语句可以这样编写:
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
如果上述代码成功执行,控制台将显示以下输出。
输出
从输出中,
- 您将能够清楚地看到集合中的所有文档都已检索。这是通过使用 mongoDB 连接(db)的 find() 方法并使用游标遍历所有文档来实现的。
- 在集合中插入文档 – 可以使用 MongoDB 库提供的 insertOne 方法将文档插入到集合中。下面的代码片段展示了如何将文档插入到 mongoDB 集合中。
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }); });
代码解释
- 在这里,我们使用 MongoDB 库中的 insertOne 方法将文档插入到 Employee 集合中。
- 我们正在指定要插入到 Employee 集合中的文档的详细信息。
如果您现在检查 MongoDB 数据库的内容,您将找到 Employeeid 为 4,EmployeeName 为“NewEmployee”的记录已插入到 Employee 集合中。
注意:控制台将不显示任何输出,因为记录正在插入数据库,此处无法显示输出。
要检查数据是否已正确插入数据库,您需要在 MongoDB 中执行以下命令:
- 使用 EmployeeDB
- db.Employee.find({Employeeid :4 })
第一个语句确保您已连接到 EmployeeDb 数据库。第二个语句搜索 Employee id 为 4 的记录。
- 在集合中更新文档 – 可以使用 MongoDB 库提供的 updateOne 方法在集合中更新文档。下面的代码片段展示了如何将文档更新到 mongoDB 集合中。
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "NewEmployee" }, { $set: { "EmployeeName": "Mohan" } }); });
代码解释
- 在这里,我们使用 MongoDB 库中的“updateOne”方法,该方法用于更新 mongoDB 集合中的文档。
- 我们正在指定需要更新的文档的搜索条件。在我们的例子中,我们想找到 EmployeeName 为“NewEmployee”的文档。
- 然后,我们想将文档的 EmployeeName 的值从“NewEmployee”设置为“Mohan”。
如果您现在检查 MongoDB 数据库的内容,您将找到 Employeeid 为 4,EmployeeName 为“Mohan”的记录已更新到 Employee 集合中。
要检查数据是否已正确更新到数据库,您需要在 MongoDB 中执行以下命令:
- 使用 EmployeeDB
- db.Employee.find({Employeeid :4 })
第一个语句确保您已连接到 EmployeeDb 数据库。第二个语句搜索 Employee id 为 4 的记录。
- 在集合中删除文档 – 可以使用 MongoDB 库提供的“deleteOne”方法将文档删除到集合中。下面的代码片段展示了如何将文档删除到 mongoDB 集合中。
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
代码解释
- 在这里,我们使用 MongoDB 库中的“deleteOne”方法,该方法用于将文档删除到 mongoDB 集合中。
- 我们正在指定需要删除的文档的搜索条件。在我们的例子中,我们想找到 EmployeeName 为“Mohan”的文档并删除该文档。
如果您现在检查 MongoDB 数据库的内容,您将发现 Employeeid 为 4,EmployeeName 为“Mohan”的记录已从 Employee 集合中删除。
要检查数据是否已正确更新到数据库,您需要在 MongoDB 中执行以下命令:
- 使用 EmployeeDB
- db.Employee.find()
第一个语句确保您已连接到 EmployeeDb 数据库。第二个语句搜索并显示 employee 集合中的所有记录。在这里,您可以看到记录是否已被删除。
如何使用 MongoDB 构建 Node Express 应用以存储和提供内容
如今,使用 Express 和 MongoDB 的组合构建应用程序是很常见的。
在处理基于 JavaScript 的 Web 应用程序时,人们通常会听到“MEAN 堆栈”这个术语。
- MEAN 堆栈是指用于开发 Web 应用程序的基于 JavaScript 的技术集合。
- MEAN 是 MongoDB、ExpressJS、AngularJS 和 Node.js 的缩写。
因此,了解 Node.js 和 MongoDB 如何协同工作以交付与后端数据库交互的应用程序总是好的。
让我们看一个简单的例子,说明如何一起使用“express”和“MongoDB”。我们的示例将使用 MongoDB EmployeeDB 数据库中的相同 Employee 集合。
我们现在将集成 Express,以便在用户请求时将数据显示在我们的网页上。当我们的应用程序在 Node.js 上运行时,您可能需要浏览到 URL https://:3000/Employeeid。
页面启动后,Employee 集合中的所有 employee id 都将被显示。所以让我们分段查看代码片段,它将使我们能够实现这一点。
步骤 1) 定义应用程序中需要使用的所有库,在我们的例子中是 MongoDB 和 express 库。
代码解释
- 我们正在定义我们的“express”库,它将在我们的应用程序中使用。
- 我们正在定义我们的“MongoDB”库,它将用于连接我们的 MongoDB 数据库。
- 在这里,我们正在定义我们要连接的数据库的 URL。
- 最后,我们正在定义一个字符串,它将用于存储稍后需要在浏览器中显示的 employee id 集合。
步骤 2) 在此步骤中,我们将获取“Employee”集合中的所有记录并相应地处理它们。
代码解释
- 我们正在为我们的应用程序创建一个名为“Employeeid”的路由。因此,每当有人浏览到我们应用程序的 https://:3000/Employeeid 时,将执行为此路由定义的代码片段。
- 在这里,我们通过 db.collection(‘Employee’).find() 命令获取“Employee”集合中的所有记录。然后,我们将此集合分配给一个名为 cursor 的变量。使用此 cursor 变量,我们将能够浏览集合的所有记录。
- 我们现在正在使用 cursor.each() 函数来导航集合的所有记录。对于每个记录,我们将定义一个代码片段,说明在访问每个记录时要执行什么操作。
- 最后,我们看到如果返回的记录不是 null,那么我们就通过命令“item.Employeeid”获取 employee。其余代码只是构建一个适当的 HTML 代码,以便我们的结果能够正确地显示在浏览器中。
步骤 3) 在此步骤中,我们将把输出发送到网页,并让我们的应用程序监听特定端口。
代码解释
- 在这里,我们将之前步骤中构建的整个内容发送到我们的网页。‘res’参数允许我们将内容作为响应发送到我们的网页。
- 我们将让我们的整个 Node.js 应用程序监听端口 3000。
输出
从输出中,
- 这清楚地表明 Employee 集合中的所有 employeeid 都已被检索。这是因为我们使用 MongoDB 驱动程序连接到数据库并检索所有 Employee 记录,随后使用“express”显示记录。
此处附上代码供您参考
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); //noinspection JSDeprecatedSymbols cursor.each(function(err, item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }); res.send(str); db.close(); }); }); var server = app.listen(3000, function() {});
注意: cursor.each 可能已根据您的 MongoDB 驱动程序版本弃用。您可以在 cursor.each 前面添加 //noinspection JSDeprecatedSymbols 来规避该问题。或者,您可以使用 forEach。下面是使用 forEach 的示例代码
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb:///EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var collection = db.collection('Employee'); var cursor = collection.find({}); str = ""; cursor.forEach(function(item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }, function(err) { res.send(err); db.close(); } ); }); }); var server = app.listen(8080, function() {});
摘要
- Node.js 与 NoSQL 数据库结合用于构建许多现代 Web 应用程序。一些常用数据库是 MySQL 和 MongoDB。
- 用于处理 MongoDB 数据库的常见模块之一是称为“MongoDB”的模块。该模块通过 Node 包管理器安装。
- 借助 MongoDB 模块,可以查询集合中的记录并执行常规的更新、删除和插入操作。
- 最后,现代实践之一是使用 Express 框架和 MongoDB 一起交付现代应用程序。Express 框架可以利用 MongoDB 驱动程序返回的数据,并相应地将数据显示给用户在网页上。