Node.js MongoDB
大多数现代 Web 应用程序在后端都有某种数据存储系统来存储数据。例如,如果你采用 Web 购物应用程序的情况,则数据(例如项目的价格或特定类型的项目数)将存储在数据库中。
Node.js 框架能够处理大多数现代 Web 应用程序通常需要的数据库。Node.js 可以使用关系(例如 Oracle 和 MS SQL Server)和非关系数据库(例如 MongoDB)。在本教程中,我们将了解如何在 Node.js 应用程序中使用数据库。
在本教程中,你将学习 -
-
Node.js 和 NoSQL 数据库
-
使用 MongoDB 和 Node.js
-
如何使用 MongoDB 构建节点表达应用程序来存储和提供内容
Node.js 和 NoSQL 数据库
多年来,诸如 MongoDB和 MySQL 之类的 NoSQL 数据库作为用于存储数据的数据库变得非常流行。这些数据库存储任何类型内容的能力,特别是任何种类的格式,都使这些数据库如此着名。
Node.js 能够将 MySQL 和 MongoDB 作为数据库使用。要使用这些数据库中的任何一个,你需要使用 Node 包管理器下载并使用所需的模块。
对于 MySQL,所需的模块称为 mysql
,对于使用 MongoDB,要安装的所需模块是 Mongoose
。
使用这些模块,你可以在 Node.js 中执行以下操作
- 管理连接池 - 你可以在此处指定 Node.js 应维护和保存的 MySQL 数据库连接数。
- 创建并关闭与数据库的连接。在任何一种情况下,你都可以提供一个回调函数,只要执行
create
和close
连接方法,就可以调用该函数。 - 可以执行查询以从各个数据库获取数据以检索数据。
- 使用这些模块也可以实现诸如插入数据,删除和更新数据之类的数据操作。
接下来我们将了解如何在 Node.js 中使用 MongoDB 数据库。
使用 MongoDB 和 Node.js
正如前面的主题中所讨论的,MongoDB 是与 Node.js 一起使用的最流行的数据库之一。
在本章中,我们将看到
我们如何与 MongoDB 数据库建立连接
我们如何执行从数据库读取数据以及在 MongoDB 数据库中插入,删除和更新记录的正常操作。
本章中我们假设我们有以下 MongoDB 数据。
数据库名称:EmployeeDB
集合名称:Employee
Documents
{
{Employeeid : 1, Employee Name : Tastones},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
安装 NPM 模块
要从 Node 应用程序中访问 Mongo,需要驱动程序。有许多 Mongo 驱动程序可用,但 MongoDB 是最受欢迎的。要安装 MongoDB 模块,请运行以下命令
npm install mongodb
创建和关闭与 MongoDB 数据库的连接
以下代码片段显示如何创建和关闭与 MongoDB 数据库的连接。
var Mongoclient = require('mongodb').Mongoclient;
var url = 'mongodb://localhost/EmployeeDB';
Mongoclient.connect(url, function(err, db) {
console.log("Connected");
db.close();
});
代码说明:
- 第一步是包括通过 require 函数完成的 mongoose 模块。一旦该模块到位,我们就可以使用此模块中可用的必要功能来创建与数据库的连接。
- 接下来,我们将连接字符串指定给数据库。在连接字符串中有 3 个键值传递。
- 第一个是
mongodb
,它指定我们连接到 MongoDB 数据库。 - 接下来是
localhost
,这意味着我们将连接到本地计算机上的数据库。 - 接下来是
EmployeeDB
,它是 MongoDB 数据库中定义的数据库的名称。
- 第一个是
- 下一步是实际连接到我们的数据库。
connect
函数接收我们的 URL 并具有指定回调函数的功能。当连接打开到数据库时将调用它。这使我们有机会知道数据库连接是否成功。 - 在函数中,我们将字符串
Connection established
写入控制台,以指示已成功建立连接。 - 最后,我们使用
db.close
语句关闭连接。 如果上面的代码正确执行,字符串Connected
将被写入控制台。
查询 MongoDB 数据库中的数据
使用 MongoDB 驱动程序,我们也可以从 MongoDB 数据库中获取数据。
下面的部分将展示我们如何使用驱动程序从 Employee 集合中获取所有文档(这是 MongoDB 数据库中包含所有员工相关文档的集合。每个文档都有一个对象 ID,员工姓名和员工 ID 在 EmployeeDB 数据库中定义文档的值。
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/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()
函数中指定搜索条件来完成。例如,假设你只是想获取员工姓名为 Tastones 的记录,那么此语句可以写成如下 var cursor=db.collection('Employee').find()
如果上述代码成功执行,则控制台中将显示以下输出。
{id: 567adf6b341785002 88e69ca, Employeeid: 1, EmployeeName: 'Guru99' }
{id: 567adf7934178500288e69cb, Employeeid: 2, EmployeeName: 'Joe' }
{id: 567adf8234178500288e69cc, Employeeid: 3, EmployeeName: 'Martin' }
从输出中,你将能够清楚地看到收集集合中的所有文档。这可以通过使用 MongoDB 连接(db)的 find()
方法并使用游标迭代所有文档来实现。
在集合中插入文档
可以使用 MongoDB 库提供的 insertOne
方法将文档插入集合中。下面的代码片段显示了我们如何将文档插入到 MongoDB 集合中。
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').insertOne({
Employeeid: 4,
EmployeeName: "NewEmployee"
});
});
代码说明:
- 这里我们使用 MongoDB 库中的 insertOne 方法将文档插入 Employee 集合中。
- 我们正在指定需要插入 Employee 集合的文档的详细信息。
如果现在检查 MongoDB 数据库的内容,你将在 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 NewEmployee
的记录。
注意: 控制台不会显示任何输出,因为记录正在数据库中插入,此处无法显示输出。
要检查数据是否已正确插入数据库,你需要在 MongoDB 中执行以下命令
- 使用 EmployeeDB
- db.Employee.find({Employeeid:4})
第一个语句确保你连接到 EmployeeDb 数据库。第二个语句搜索员工 ID 为 4 的记录。
更新集合中的文档
可以使用 MongoDB 库提供的 updateOne 方法在集合中更新文档。以下代码段显示了如何更新 MongoDB 集合中的文档。
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/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 数据库的内容,你将在 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 Mohan
的记录。
要检查数据库中的数据是否已正确更新,你需要在 MongoDB 中执行以下命令
- 使用 EmployeeDB
- db.Employee.find({Employeeid:4})
第一个语句确保你连接到 EmployeeDb 数据库。第二个语句搜索员工 ID 为 4 的记录。
删除集合中的文档
可以使用 MongoDB 库提供的 deleteOne
方法在集合中删除文档。以下代码段显示了如何删除 MongoDB 集合中的文档。
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').deleteOne(
{
"EmployeeName": "Mohan"
}
);
});
代码说明:
- 这里我们使用 MongoDB 库中的
deleteOne
方法,该方法用于删除 MongoDB 集合中的文档。 - 我们正在指定需要删除哪个文档的搜索条件。在我们的例子中,我们想要找到 EmployeeName 为
Mohan
的文档并删除该文档。
如果现在检查 MongoDB 数据库的内容,你将从 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 Mohan
的记录。
要检查数据库中的数据是否已正确更新,你需要在 MongoDB 中执行以下命令
- 使用 EmployeeDB
db.Employee.find()
第一个语句确保你连接到 EmployeeDb 数据库。第二个语句搜索并显示 employee 集合中的所有记录。你可以在此处查看记录是否已删除。
##如何使用 MongoDB 构建节点表达应用程序来存储和提供内容
使用 express 和 MongoDB 组合构建应用程序现在非常普遍。
使用[JavaScript](/ interactive-javascript-tutorials.html)基于 Web 的应用程序时,通常会出现术语 MEAN 堆栈。
- 术语 MEAN 堆栈是指用于开发 Web 应用程序的基于 JavaScript 的技术的集合。
- MEAN 是 MongoDB,ExpressJS,[AngularJS](/ angularjs-tutorial.html)和 Node.js 的首字母缩写。
因此,了解 Node.js 和 MongoDB 如何协同工作以提供与后端数据库交互的应用程序总是很好的。
让我们看一个如何将 express
和 MongoDB
结合使用的简单示例。我们的示例将在 MongoDB EmployeeDB 数据库中使用相同的 Employee 集合。
我们现在将 Express 用于在用户请求时在我们的网页上显示数据。当我们的应用程序在 Node.js 上运行时,可能需要浏览到 URL http://localhost:3000/Employeeid
。
启动页面后,将显示 Employee 集合中的所有员工 ID。因此,让我们在部分中看到代码片段,这将允许我们实现此目的。
步骤 1: 定义需要在我们的应用程序中使用的所有库,在我们的例子中是 MongoDB 和 express 库。
var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
var str="";
代码说明:
- 我们正在定义我们的
express
库,它将在我们的应用程序中使用。 - 我们正在定义我们的
express
库,它将在我们的应用程序中用于连接到 MongoDB 数据库。 这里我们定义要连接的数据库的 URL。 - 最后,我们定义了一个字符串,用于存储我们的员工 ID 集合,稍后需要在浏览器中显示。
步骤 2: 在此步骤中,我们现在将获取 员工
集合中的所有记录并相应地使用它们。
app.route('/Employeeid').get(function(reg, res)
{
MongoClient.connect(url, function (err, db) {
var cursor =db.collection('Employee').find();
cursor.each(function (err, item) {
if(item != null) {
str = str + " Employee id
+ item. Employeeid + "</br>";
}});
代码说明:
- 我们正在创建一个名为
Employeeid
的应用程序路径。因此,每当有人浏览我们应用程序的http://localhost:3000/Employeeid
时,将执行为此路由定义的代码段。 - 在这里,我们通过
db.collection('Employee').find()
命令获取Employee
集合中的所有记录。然后我们将此集合分配给名为 cursor 的变量。使用此游标变量,我们将能够浏览集合的所有记录。 - 我们现在使用
cursor.each()
函数来浏览集合的所有记录。对于每条记录,我们将定义一个代码片段,说明访问每条记录时要执行的操作。 - 最后,我们看到如果返回的记录不为 null,那么我们通过命令
item.Employeeid
获取员工。其余的代码只是构建一个正确的 HTML 代码,这将允许我们的结果在浏览器中正确显示。
步骤 3: 在此步骤中,我们将输出发送到网页,并使我们的应用程序侦听特定端口。
res.send(str);
}); });
var server=app.listen(3000, function()
{});
代码说明:
- 在这里,我们将在前面步骤中构建的整个内容发送到我们的网页。
res
参数允许我们将内容作为回复发送到我们的网页。 - 我们正在使整个 Node.js 应用程序侦听端口 3000。
输出:
从输出,它清楚地显示了 Employee 集合中的所有 employeeid 都被检索到了。这是因为我们使用 MongoDB 驱动程序连接到数据库并检索所有 Employee 记录,然后使用 express
来显示记录。
以下是供你参考的代码
var express = require('express');
var app = `express()`;
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/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://localhost/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(str);
db.close();
}
);
});
});
var server = app.listen(8080, `function()` {});
概要
- Node.js 与 NoSQL 数据库结合使用,构建了许多现代 Web 应用程序。一些常用的数据库是 MySQL 和 MongoDB。
- 用于处理 MongoDB 数据库的常用模块之一是名为
MongoDB
的模块。该模块通过 Node 包管理器安装。 - 使用 MongoDB 模块,可以查询集合中的记录并执行正常的更新,删除和插入操作。
- 最后,现代实践之一是使用 express 框架和 MongoDB 来提供现代应用程序。Express 框架可以利用 MongoDB 驱动程序返回的数据,并相应地在网页中向用户显示数据。