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 中执行以下操作

  1. 管理连接池 - 你可以在此处指定 Node.js 应维护和保存的 MySQL 数据库连接数。
  2. 创建并关闭与数据库的连接。在任何一种情况下,你都可以提供一个回调函数,只要执行 createclose 连接方法,就可以调用该函数。
  3. 可以执行查询以从各个数据库获取数据以检索数据。
  4. 使用这些模块也可以实现诸如插入数据,删除和更新数据之类的数据操作。

接下来我们将了解如何在 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();
});

代码说明:

  1. 第一步是包括通过 require 函数完成的 mongoose 模块。一旦该模块到位,我们就可以使用此模块中可用的必要功能来创建与数据库的连接。
  2. 接下来,我们将连接字符串指定给数据库。在连接字符串中有 3 个键值传递。
    • 第一个是 mongodb,它指定我们连接到 MongoDB 数据库。
    • 接下来是 localhost,这意味着我们将连接到本地计算机上的数据库。
    • 接下来是 EmployeeDB,它是 MongoDB 数据库中定义的数据库的名称。
  3. 下一步是实际连接到我们的数据库。 connect 函数接收我们的 URL 并具有指定回调函数的功能。当连接打开到数据库时将调用它。这使我们有机会知道数据库连接是否成功。
  4. 在函数中,我们将字符串 Connection established 写入控制台,以指示已成功建立连接。
  5. 最后,我们使用 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);
		});
}); 

代码说明:

  1. 在第一步中,我们创建一个游标(游标是一个指针,用于指向从数据库中获取的各种记录。然后使用游标迭代数据库中的不同记录。这里我们是定义一个名为 cursor 的变量名,它将用于存储指向从数据库获取的记录的指针。)它指向从 MongoDb 集合中获取的记录。我们还可以指定从中获取记录的集合 Employee.find() 函数用于指定我们要从 MongoDB 集合中检索所有文档。
  2. 我们现在正在遍历游标,对于游标中的每个文档,我们将执行一个函数。
  3. 我们的功能就是将每个文档的内容打印到控制台。

**注意: -**也可以从数据库中获取特定记录。这可以通过在 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"
    });
}); 

代码说明:

  1. 这里我们使用 MongoDB 库中的 insertOne 方法将文档插入 Employee 集合中。
  2. 我们正在指定需要插入 Employee 集合的文档的详细信息。

如果现在检查 MongoDB 数据库的内容,你将在 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 NewEmployee 的记录。

注意: 控制台不会显示任何输出,因为记录正在数据库中插入,此处无法显示输出。

要检查数据是否已正确插入数据库,你需要在 MongoDB 中执行以下命令

  1. 使用 EmployeeDB
  2. 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" }
    });

}); 

代码说明:

  1. 这里我们使用 MongoDB 库中的 updateOne 方法,该方法用于更新 MongoDB 集合中的文档。
  2. 我们正在指定需要更新哪个文档的搜索条件。在我们的例子中,我们希望找到 EmployeeName 为 NewEmployee 的文档。
  3. 然后,我们要将文档的 EmployeeName 的值从 NewEmployee 设置为 Mohan

如果现在检查 MongoDB 数据库的内容,你将在 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 Mohan 的记录。

要检查数据库中的数据是否已正确更新,你需要在 MongoDB 中执行以下命令

  1. 使用 EmployeeDB
  2. 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"
        }
    );

}); 

代码说明:

  1. 这里我们使用 MongoDB 库中的 deleteOne 方法,该方法用于删除 MongoDB 集合中的文档。
  2. 我们正在指定需要删除哪个文档的搜索条件。在我们的例子中,我们想要找到 EmployeeName 为 Mohan 的文档并删除该文档。

如果现在检查 MongoDB 数据库的内容,你将从 Employee 集合中找到 Employeeid 为 4 且 EmployeeName 为 Mohan 的记录。

要检查数据库中的数据是否已正确更新,你需要在 MongoDB 中执行以下命令

  1. 使用 EmployeeDB
  2. 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 如何协同工作以提供与后端数据库交互的应用程序总是很好的。

让我们看一个如何将 expressMongoDB 结合使用的简单示例。我们的示例将在 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="";

代码说明:

  1. 我们正在定义我们的 express 库,它将在我们的应用程序中使用。
  2. 我们正在定义我们的 express 库,它将在我们的应用程序中用于连接到 MongoDB 数据库。 这里我们定义要连接的数据库的 URL。
  3. 最后,我们定义了一个字符串,用于存储我们的员工 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>"; 
		}});

代码说明:

  1. 我们正在创建一个名为 Employeeid 的应用程序路径。因此,每当有人浏览我们应用程序的 http://localhost:3000/Employeeid 时,将执行为此路由定义的代码段。
  2. 在这里,我们通过 db.collection('Employee').find() 命令获取 Employee 集合中的所有记录。然后我们将此集合分配给名为 cursor 的变量。使用此游标变量,我们将能够浏览集合的所有记录。
  3. 我们现在使用 cursor.each() 函数来浏览集合的所有记录。对于每条记录,我们将定义一个代码片段,说明访问每条记录时要执行的操作。
  4. 最后,我们看到如果返回的记录不为 null,那么我们通过命令 item.Employeeid 获取员工。其余的代码只是构建一个正确的 HTML 代码,这将允许我们的结果在浏览器中正确显示。

步骤 3: 在此步骤中,我们将输出发送到网页,并使我们的应用程序侦听特定端口。

	res.send(str);
	}); });
	
var server=app.listen(3000, function()
{});

代码说明:

  1. 在这里,我们将在前面步骤中构建的整个内容发送到我们的网页。 res 参数允许我们将内容作为回复发送到我们的网页。
  2. 我们正在使整个 Node.js 应用程序侦听端口 3000。

输出:

Node.js MongoDB express

从输出,它清楚地显示了 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 驱动程序返回的数据,并相应地在网页中向用户显示数据。