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

  1. 管理连接池 – 在这里,您可以指定 Node.js 应该维护和保存的 MySQL 数据库连接数。
  2. 创建和关闭与数据库的连接。在这两种情况下,您都可以提供一个回调函数,该函数可以在“创建”和“关闭”连接方法执行时调用。
  3. 可以执行查询以从相应的数据库中获取数据以检索数据。
  4. 还可以使用这些模块实现数据操作,例如插入、删除和更新数据。

在其余主题中,我们将探讨如何在 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},
}
  1. 安装 NPM 模块

您需要一个驱动程序才能从 Node 应用程序访问 Mongo。有许多 Mongo 驱动程序可用,但 MongoDB 是其中最受欢迎的之一。要安装 MongoDB 模块,请运行以下命令:

npm install mongodb

  1. 创建和关闭与 MongoDB 数据库的连接。下面的代码片段展示了如何创建和关闭与 MongoDB 数据库的连接。

Using MongoDB and Node.js

代码解释

  1. 第一步是包含 mongoose 模块,这通过 require 函数完成。一旦有了这个模块,我们就可以使用该模块中可用的必要函数来创建数据库连接。
  2. 接下来,我们指定连接到数据库的连接字符串。在连接字符串中,有 3 个关键值被传递。
  • 第一个是“mongodb”,它指定我们正在连接到 MongoDB 数据库。
  • 下一个是“localhost”,表示我们正在连接到本地计算机上的数据库。
  • 下一个是“EmployeeDB”,这是我们在 MongoDB 数据库中定义的数据库名称。
  1. 下一步是实际连接到我们的数据库。connect 函数接受我们的 URL,并提供指定回调函数的功能。连接打开到数据库时会调用该回调函数。这为我们提供了了解数据库连接是否成功机会。
  2. 在此函数中,我们将字符串“Connection established”写入控制台,以表明已成功创建连接。
  3. 最后,我们使用 db.close 语句关闭连接。

如果上述代码执行正确,控制台将显示字符串“Connected”,如下所示。

Using MongoDB and Node.js

  1. 查询 MongoDB 数据库中的数据 – 使用 MongoDB 驱动程序,我们还可以从 MongoDB 数据库中获取数据。下面的部分将展示我们如何使用驱动程序从我们 EmployeeDB 数据库中的 Employee 集合中获取所有文档。这是我们 MongoDB 数据库中的集合,其中包含所有员工相关文档。每个文档都有一个对象 ID、员工姓名和员工 ID 来定义文档的值。

Using MongoDB and Node.js

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);

    });
});

代码解释

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

注意: – 也可以从数据库中获取特定记录。这可以通过在 find() 函数中指定搜索条件来完成。例如,假设您只想获取员工姓名为 Guru99 的记录,那么此语句可以这样编写:

var cursor=db.collection('Employee').find({EmployeeName: "guru99"})

如果上述代码成功执行,控制台将显示以下输出。

输出

Using MongoDB and Node.js

从输出中,

  • 您将能够清楚地看到集合中的所有文档都已检索。这是通过使用 mongoDB 连接(db)的 find() 方法并使用游标遍历所有文档来实现的。
  1. 在集合中插入文档 – 可以使用 MongoDB 库提供的 insertOne 方法将文档插入到集合中。下面的代码片段展示了如何将文档插入到 mongoDB 集合中。

Using MongoDB and Node.js

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb:///EmployeeDB';

MongoClient.connect(url, function(err, db) {

    db.collection('Employee').insertOne({
        Employeeid: 4,
        EmployeeName: "NewEmployee"
    });
}); 

代码解释

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

如果您现在检查 MongoDB 数据库的内容,您将找到 Employeeid 为 4,EmployeeName 为“NewEmployee”的记录已插入到 Employee 集合中。

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

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

  1. 使用 EmployeeDB
  2. db.Employee.find({Employeeid :4 })

第一个语句确保您已连接到 EmployeeDb 数据库。第二个语句搜索 Employee id 为 4 的记录。

  1. 在集合中更新文档 – 可以使用 MongoDB 库提供的 updateOne 方法在集合中更新文档。下面的代码片段展示了如何将文档更新到 mongoDB 集合中。

Using MongoDB and Node.js

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb:///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 数据库的内容,您将找到 Employeeid 为 4,EmployeeName 为“Mohan”的记录已更新到 Employee 集合中。

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

  1. 使用 EmployeeDB
  2. db.Employee.find({Employeeid :4 })

第一个语句确保您已连接到 EmployeeDb 数据库。第二个语句搜索 Employee id 为 4 的记录。

  1. 在集合中删除文档 – 可以使用 MongoDB 库提供的“deleteOne”方法将文档删除到集合中。下面的代码片段展示了如何将文档删除到 mongoDB 集合中。

Using MongoDB and Node.js

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb:///EmployeeDB';

MongoClient.connect(url, function(err, db) {

    db.collection('Employee').deleteOne(

        {
            "EmployeeName": "Mohan"
        }

    );
}); 

代码解释

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

如果您现在检查 MongoDB 数据库的内容,您将发现 Employeeid 为 4,EmployeeName 为“Mohan”的记录已从 Employee 集合中删除。

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

  1. 使用 EmployeeDB
  2. 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 库。

Build a Node Express App with MongoDB

代码解释

  1. 我们正在定义我们的“express”库,它将在我们的应用程序中使用。
  2. 我们正在定义我们的“MongoDB”库,它将用于连接我们的 MongoDB 数据库。
  3. 在这里,我们正在定义我们要连接的数据库的 URL。
  4. 最后,我们正在定义一个字符串,它将用于存储稍后需要在浏览器中显示的 employee id 集合。

步骤 2) 在此步骤中,我们将获取“Employee”集合中的所有记录并相应地处理它们。

Build a Node Express App with MongoDB

代码解释

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

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

Build a Node Express App with MongoDB

代码解释

  1. 在这里,我们将之前步骤中构建的整个内容发送到我们的网页。‘res’参数允许我们将内容作为响应发送到我们的网页。
  2. 我们将让我们的整个 Node.js 应用程序监听端口 3000。

输出

Build a Node Express App with MongoDB

从输出中,

  • 这清楚地表明 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 驱动程序返回的数据,并相应地将数据显示给用户在网页上。