Node 和 MongoDB - 快速指南


节点和 MongoDB - 概述

什么是 Node.js?

Node.js 是一个基于 Google Chrome 的 JavaScript 引擎(V8 引擎)构建的服务器端平台。Node.js 由 Ryan Dahl 于 2009 年开发,最新版本为 v0.10.36。Node.js官方文档提供的定义如下 -

Node.js 是一个基于Chrome 的 JavaScript 运行时构建的平台,用于轻松构建快速且可扩展的网络应用程序。Node.js 使用事件驱动的非阻塞 I/O 模型,使其轻量级且高效,非常适合跨分布式设备运行的数据密集型实时应用程序。

Node.js 是一个开源的跨平台运行时环境,用于开发服务器端和网络应用程序。Node.js 应用程序是用 JavaScript 编写的,可以在 OS X、Microsoft Windows 和 Linux 上的 Node.js 运行时内运行。

Node.js 还提供了丰富的各种 JavaScript 模块库,这在很大程度上简化了使用 Node.js 的 Web 应用程序的开发。

Node.js = Runtime Environment + JavaScript Library

蒙古数据库

mongodb 是 Node.js 驱动程序,用于在 MongoDB 上连接并执行数据库操作。要安装 mongodb,请运行以下 npm 命令。

npm install mongodb
+ mongodb@3.6.9
added 1 package from 1 contributor in 1.781s

创建/连接到数据库

一旦 mongoClient 被实例化,它的 connect() 方法就可以用来获取与数据库的连接。

// MongoDBClient
const client = new MongoClient(url, { useUnifiedTopology: true });
// make a connection to the database
client.connect(function(error) {
   if (error) throw error;
   console.log("Connected!");
   // create or connect to database
   const db = client.db(database);
   // close the connection
   client.close();
});

如果数据库不存在,则上面的命令将创建相同的数据库。

在后续章节中,我们将看到使用 Node.js 对 MongoDB 进行各种操作。

Node 和 MongoDB - 环境设置

安装 MongoDB 数据库

使用MongoDB - 环境执行 MongoDB 安装步骤

安装节点

在线现场演示选项

您确实不需要设置自己的环境来开始学习 Node.js。原因很简单,我们已经在线搭建了Node.js环境,这样你就可以在线执行所有可用的示例,边实践边学习。请随意修改任何示例并使用不同选项检查结果。

使用以下示例代码框(在我们的网站上)右上角提供的“实时演示”选项尝试以下示例 -

/* Hello World! program in Node.js */
console.log("Hello World!");

对于本教程中给出的大多数示例,您都会找到“尝试”选项,因此只需使用它并享受学习的乐趣。

本地环境设置

如果您仍然愿意为 Node.js 设置环境,则您的计算机上需要有以下两个软件:(a) 文本编辑器和 (b) Node.js 二进制安装程序。

文本编辑器

这将用于输入您的程序。少数编辑器的示例包括 Windows 记事本、操作系统编辑命令、Brief、Epsilon、EMACS 和 vim 或 vi。

文本编辑器的名称和版本可能因不同操作系统而异。例如,记事本将在 Windows 上使用,vim 或 vi 可以在 Windows 上使用,也可以在 Linux 或 UNIX 上使用。

您使用编辑器创建的文件称为源文件,包含程序源代码。Node.js 程序的源文件通常以扩展名“ .js ”命名。

在开始编程之前,请确保您有一个文本编辑器,并且您有足够的经验来编写计算机程序、将其保存在文件中并最终执行它。

Node.js 运行时

源文件中编写的源代码只是 javascript。Node.js 解释器将用于解释和执行您的 JavaScript 代码。

Node.js 发行版以二进制形式安装,适用于采用 32 位 (386) 和 64 位 (amd64) x86 处理器架构的 SunOS、Linux、Mac OS X 和 Windows 操作系统。

以下部分将指导您如何在各种操作系统上安装 Node.js 二进制发行版。

下载 Node.js 存档

从Node.js 下载下载最新版本的 Node.js 可安装存档文件。在撰写本教程时,以下是不同操作系统上可用的版本。

操作系统 档案名称
Windows 节点-v12.16.1-x64.msi
Linux 节点-v12.16.1-linux-x86.tar.gz
苹果 节点-v12.16.1-darwin-x86.tar.gz
太阳操作系统 节点-v12.16.1-sunos-x86.tar.gz

在 UNIX/Linux/Mac OS X 和 SunOS 上安装

根据您的操作系统架构,下载存档文件 node-v12.16.1- osname .tar.gz 并将其解压到 /tmp 中,最后将解压的文件移动到 /usr/local/nodejs 目录中。例如:

$ cd /tmp
$ wget http://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.gz
$ tar xvfz node-v12.16.1-linux-x64.tar.gz
$ mkdir -p /usr/local/nodejs
$ mv node-v12.16.1-linux-x64/* /usr/local/nodejs

将 /usr/local/nodejs/bin 添加到 PATH 环境变量。

操作系统 输出
Linux 导出 PATH=$PATH:/usr/local/nodejs/bin
苹果 导出 PATH=$PATH:/usr/local/nodejs/bin
自由BSD 导出 PATH=$PATH:/usr/local/nodejs/bin

在 Windows 上安装

使用 MSI 文件并按照提示安装 Node.js。默认情况下,安装程序使用 C:\Program Files\nodejs 中的 Node.js 发行版。安装程序应在 Windows 的 PATH 环境变量中设置 C:\Program Files\nodejs\bin 目录。重新启动所有打开的命令提示符以使更改生效。

验证安装:执行文件

在您的计算机(Windows 或 Linux)上创建一个名为main.js的 js 文件,其中包含以下代码。

/* Hello, World! program in node.js */
console.log("Hello, World!")

现在使用 Node.js 解释器执行 main.js 文件以查看结果 -

$ node main.js

如果您的安装一切正常,这应该会产生以下结果 -

Hello, World!

蒙古数据库

mongodb 是 Node.js 驱动程序,用于在 MongoDB 上连接并执行数据库操作。要安装 mongodb,请运行以下 npm 命令。

npm install mongodb
+ mongodb@3.6.9
added 1 package from 1 contributor in 1.781s

Node & MongoDB - 连接数据库

Node mongodb 提供了mongoClient对象,用于使用 connect() 方法连接数据库连接。该函数接受多个参数并提供 db 对象来执行数据库操作。

句法

// MongoDBClient
const client = new MongoClient(url, { useUnifiedTopology: true });
// make a connection to the database
client.connect();

您可以随时使用另一个连接对象函数close()断开与 MongoDB 数据库的连接。

句法

client.close()

例子

尝试以下示例连接到 MongoDB 服务器 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!

Node 和 MongoDB - 显示数据库

要显示数据库,您可以使用admin.listDatabases()方法来获取所有数据库的名称,其中 admin 代表管理类。

MongoClient.connect(url, function(error, client) {
   // Use the admin database for the operation
   const adminDb = client.db('myDb').admin();
   // List all the available databases
   adminDb.listDatabases(function(err, dbs) {
      console.log(dbs);
   });
});

例子

尝试以下示例连接到 MongoDB 服务器 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Use the admin database for the operation
   const adminDb = client.db('myDb').admin();
   // List all the available databases
   adminDb.listDatabases(function(err, dbs) {
      console.log(dbs);
   });
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
{
  databases: [
    { name: 'admin', sizeOnDisk: 40960, empty: false },
    { name: 'config', sizeOnDisk: 36864, empty: false },
    { name: 'local', sizeOnDisk: 73728, empty: false }
  ],
  totalSize: 151552,
  ok: 1
}

Node 和 MongoDB - 删除数据库

要删除数据库,可以使用database.drop()方法删除选定的数据库。

MongoClient.connect(url, function(error, client) {
   // Connect to the database
   const database = client.db('myDb');   
   // Drop the database
   database.dropDatabase();
});

例子

尝试以下示例来删除 mongodb 数据库 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');
   
   // Drop the database
   database.dropDatabase();
   
   console.log("Database dropped!");
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
Database dropped!

Node & MongoDB - 创建集合

要创建集合,可以使用database.createCollection()方法来创建集合。

MongoClient.connect(url, function(error, client) {
   // Connect to the database
   const database = client.db('myDb');   
   // Create the collection
   database.createCollection('sampleCollection');
});

例子

尝试以下示例来创建 mongodb 集合 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');  
   // Create the collection
   database.createCollection('sampleCollection');   
   console.log("Collection created.");
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
Collection created.

Node 和 MongoDB - 删除集合

要删除集合,可以使用collection.drop()方法删除集合。

MongoClient.connect(url, function(error, client) {
   // Connect to the database
   const database = client.db('myDb');
   // drop the collection
   database.collection('sampleCollection').drop(function(error, status) {
      if (error) throw error;
      if (status) {
         console.log("Collection deleted");		  
      }      
   });
});

例子

尝试以下示例来删除 mongodb 集合 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');
   // Create the collection
   database.collection('sampleCollection').drop(function(error, status) {
      if (error) throw error;
      if (status) {
         console.log("Collection deleted.");		  
      }      
   });
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
Collection deleted.

Node & MongoDB - 显示集合

要显示数据库的集合,可以使用database.listCollections()方法来获取集合列表。

MongoClient.connect(url, function(error, client) {
   // Connect to the database
   const database = client.db('myDb');   
   // get the list of collections
   database.listCollections().toArray(function(err, collections) {
      collections.forEach(collection => console.log(collection.name));
   });
});

例子

尝试以下示例来创建 mongodb 集合 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');
   // Create the collection
   database.createCollection('sampleCollection');   
   database.listCollections().toArray(function(err, collections) {
      collections.forEach(collection => console.log(collection.name));
   });
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
sampleCollection

Node 和 MongoDB - 插入文档

要在数据库集合中插入文档,可以使用collection.insertOne()collection.insertMany()方法插入一个或多个文档。

database.collection("sampleCollection").insertOne(firstDocument, function(error, res) {
   if (error) throw error;
   console.log("1 document inserted");
});
database.collection("sampleCollection").insertMany(documents, function(error, res) {
   if (error) throw error;
   console.log("Documents inserted: " + res.insertedCount);
});

例子

尝试以下示例在 mongodb 集合中插入文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
const firstDocument = {
   First_Name : 'Mahesh',
   Last_Name : 'Parashar',
   Date_Of_Birth: '1990-08-21',
   e_mail: 'mahesh_parashar.123@gmail.com',
   phone: '9034343345'
};
const documents = [{
   First_Name : 'Radhika',
   Last_Name : 'Sharma',
   Date_Of_Birth: '1995-09-26',
   e_mail: 'radhika_sharma.123@gmail.com',
   phone: '9000012345'
},
{
   First_Name : 'Rachel',
   Last_Name : 'Christopher',
   Date_Of_Birth: '1990-02-16',
   e_mail: 'rachel_christopher.123@gmail.com',
   phone: '9000054321'
},
{
   First_Name : 'Fathima',
   Last_Name : 'Sheik',
   Date_Of_Birth: '1990-02-16',
   e_mail: 'fathima_sheik.123@gmail.com',
   phone: '9000012345'
}
];
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');
   database.collection("sampleCollection").insertOne(firstDocument, function(error, res) {
      if (error) throw error;
      console.log("1 document inserted");
   });
   database.collection("sampleCollection").insertMany(documents, function(error, res) {
      if (error) throw error;
      console.log("Documents inserted: " + res.insertedCount);
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Documents inserted: 3
1 document inserted

Node 和 MongoDB - 选择文档

要选择集合中的文档,可以使用collection.findOne()collection.find()方法来选择一个或多个文档。

database.collection("sampleCollection").findOne({}, function(error, result) {
   if (error) throw error;
   console.log(result);
});
database.collection("sampleCollection").find({}).toArray(function(error, result) {
   if (error) throw error;
   console.log(result);
});

例子

尝试以下示例来选择 mongodb 集合中的文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');      
   database.collection("sampleCollection").findOne({}, function(error, result) {
      if (error) throw error;
      console.log(result);
   });   database.collection("sampleCollection").find({}).toArray(function(error, result) {
      if (error) throw error;
      console.log(result);
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
{
  _id: 60c4bbb40f8c3920a0e30fdd,
  First_Name: 'Radhika',
  Last_Name: 'Sharma',
  Date_Of_Birth: '1995-09-26',
  e_mail: 'radhika_sharma.123@gmail.com',
  phone: '9000012345'
}
[
  {
    _id: 60c4bbb40f8c3920a0e30fdd,
    First_Name: 'Radhika',
    Last_Name: 'Sharma',
    Date_Of_Birth: '1995-09-26',
    e_mail: 'radhika_sharma.123@gmail.com',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: 'rachel_christopher.123@gmail.com',
    phone: '9000054321'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdf,
    First_Name: 'Fathima',
    Last_Name: 'Sheik',
    Date_Of_Birth: '1990-02-16',
    e_mail: 'fathima_sheik.123@gmail.com',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdc,
    First_Name: 'Mahesh',
    Last_Name: 'Parashar',
    Date_Of_Birth: '1990-08-21',
    e_mail: 'mahesh_parashar.123@gmail.com',
    phone: '9034343345'
  }
]

Node 和 MongoDB - 更新文档

要更新集合的文档,您可以使用collection.updateOne()collection.updateMany()方法来更新一个或多个文档。

database.collection("sampleCollection").updateOne(query,updates, function(error, result) {
   if (error) throw error;
   console.log('Document Updated');
});
database.collection("sampleCollection").updateMany(query,updates, function(error, result) {
   if (error) throw error;
   console.log(result.result.nModified + " document(s) updated");
});

例子

尝试以下示例来更新 mongodb 集合中的文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');
   database.collection("sampleCollection").updateOne({First_Name:'Mahesh'},
      { $set: { e_mail: 'maheshparashar@gmail.com' } }, function(error, result) {
      if (error) throw error;
      console.log('Document Updated.');
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
Document Updated.

Node 和 MongoDB - 删除文档

要删除集合中的文档,可以使用collection.deleteOne()collection.deleteMany()方法删除一个或多个文档。

database.collection("sampleCollection").deleteOne(query, function(error, result) {
   if (error) throw error;
   console.log('Document deleted.');
});
database.collection("sampleCollection").deleteMany(query, function(error, result) {
   if (error) throw error;
   console.log(result.result.n + " document(s) deleted.");
});

例子

尝试以下示例来删除 mongodb 集合中的文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');  database.collection("sampleCollection").deleteOne({First_Name:'Mahesh'}, function(error, result) {
      if (error) throw error;
      console.log('Document Deleted.');
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
Document Deleted.

Node 和 MongoDB - 嵌入式文档

要在数据库集合中插入嵌入文档,您可以使用collection.insertOne()collection.insertMany()方法插入一个或多个文档。

database.collection("sampleCollection").insertOne(firstDocument, function(error, res) {
   if (error) throw error;
   console.log("1 document inserted");
});
database.collection("sampleCollection").insertMany(documents, function(error, res) {
   if (error) throw error;
   console.log("Documents inserted: " + res.insertedCount);
});

例子

尝试以下示例在 mongodb 集合中插入文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
const firstPost = {
   title : 'MongoDB Overview',
   description : 'MongoDB is no SQL database',
   by: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   comments: [{
      user: 'user1',
      message: 'My First Comment',
      dateCreated: '20/2/2020',
      like: 0
   },
   {
      user: 'user2',
      message: 'My Second Comment',
      dateCreated: '20/2/2020',
      like: 0
   }]
};
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('posts');      
   database.collection("samplePost").insertOne(firstPost, function(error, res) {
   if (error) throw error;
      console.log("1 document inserted");
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected.
1 document inserted

Node & MongoDB - 限制记录

要限制集合中选定的文档,您可以使用collection.find().limit()方法来选择所需的文档。

database.collection("sampleCollection").find({}).limit(2).toArray(function(error, result) {
   if (error) throw error;
   console.log(result);
});

例子

尝试以下示例来选择 mongodb 集合中的有限文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');   database.collection("sampleCollection").find({}).limit(2).toArray(function(error, result) {
      if (error) throw error;
      console.log(result);
   }); 
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
[
  {
    _id: 60c4bbb40f8c3920a0e30fdd,
    First_Name: 'Radhika',
    Last_Name: 'Sharma',
    Date_Of_Birth: '1995-09-26',
    e_mail: 'radhika_sharma.123@gmail.com',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: 'rachel_christopher.123@gmail.com',
    phone: '9000054321'
  }
]

Node 和 MongoDB - 记录排序

要对集合中选定的文档进行排序,可以使用collection.find().sort()方法对文档进行排序。

database.collection("sampleCollection").find({}).sort({First_Name: -1}).toArray(function(error, result) {
   if (error) throw error;
   console.log(result);
});

例子

尝试以下示例来选择 mongodb 集合中的有限文档 -

将以下示例复制并粘贴为 mongodb_example.js -

const MongoClient = require('mongodb').MongoClient;
// Prepare URL
const url = "mongodb://localhost:27017/";
// make a connection to the database
MongoClient.connect(url, function(error, client) {
   if (error) throw error;
   console.log("Connected!");
   // Connect to the database
   const database = client.db('myDb');  
   database.collection("sampleCollection").find({}).sort({First_Name: -1}).toArray(function(error, result) {
      if (error) throw error;
      console.log(result);
   });   
   // close the connection
   client.close();
});

输出

使用 Node 执行 mysql_example.js 脚本并验证输出。

node mongodb_example.js
Connected!
[
  {
    _id: 60c4bbb40f8c3920a0e30fdd,
    First_Name: 'Radhika',
    Last_Name: 'Sharma',
    Date_Of_Birth: '1995-09-26',
    e_mail: 'radhika_sharma.123@gmail.com',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: 'rachel_christopher.123@gmail.com',
    phone: '9000054321'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdf,
    First_Name: 'Fathima',
    Last_Name: 'Sheik',
    Date_Of_Birth: '1990-02-16',
    e_mail: 'fathima_sheik.123@gmail.com',
    phone: '9000012345'
  }
]