Node & MongoDB - 快速指南



Node & 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

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

npm install mongodb
+ [email protected]
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 对 MongoDB 执行各种操作。

Node & MongoDB - 环境设置

安装 MongoDB 数据库

按照使用MongoDB - 环境提供的 MongoDB 安装步骤进行操作。

安装 Node

在线实时演示选项

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

使用下面示例代码框(在我们的网站上)右上角的实时演示选项尝试以下示例:

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

在本教程中给出的大多数示例中,您会找到一个“尝试一下”选项,因此只需使用它并享受您的学习过程。

本地环境设置

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

文本编辑器

这将用于键入您的程序。一些编辑器的示例包括 Windows 记事本、OS Edit 命令、Brief、Epsilon、EMACS 和 vim 或 vi。

文本编辑器的名称和版本在不同的操作系统上可能有所不同。例如,Notepad 将在 Windows 上使用,而 vim 或 vi 则可以在 Windows 以及 Linux 或 UNIX 上使用。

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

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

Node.js 运行时环境

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

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

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

下载 Node.js 归档文件

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

操作系统 归档文件名称
Windows node-v12.16.1-x64.msi
Linux node-v12.16.1-linux-x86.tar.gz
Mac node-v12.16.1-darwin-x86.tar.gz
SunOS node-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 https://node.org.cn/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 export PATH=$PATH:/usr/local/nodejs/bin
Mac export PATH=$PATH:/usr/local/nodejs/bin
FreeBSD export 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

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

npm install mongodb
+ [email protected]
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://127.0.0.1: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 表示 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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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://127.0.0.1:27017/";
const firstDocument = {
   First_Name : 'Mahesh',
   Last_Name : 'Parashar',
   Date_Of_Birth: '1990-08-21',
   e_mail: '[email protected]',
   phone: '9034343345'
};
const documents = [{
   First_Name : 'Radhika',
   Last_Name : 'Sharma',
   Date_Of_Birth: '1995-09-26',
   e_mail: '[email protected]',
   phone: '9000012345'
},
{
   First_Name : 'Rachel',
   Last_Name : 'Christopher',
   Date_Of_Birth: '1990-02-16',
   e_mail: '[email protected]',
   phone: '9000054321'
},
{
   First_Name : 'Fathima',
   Last_Name : 'Sheik',
   Date_Of_Birth: '1990-02-16',
   e_mail: '[email protected]',
   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://127.0.0.1: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: '[email protected]',
  phone: '9000012345'
}
[
  {
    _id: 60c4bbb40f8c3920a0e30fdd,
    First_Name: 'Radhika',
    Last_Name: 'Sharma',
    Date_Of_Birth: '1995-09-26',
    e_mail: '[email protected]',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: '[email protected]',
    phone: '9000054321'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdf,
    First_Name: 'Fathima',
    Last_Name: 'Sheik',
    Date_Of_Birth: '1990-02-16',
    e_mail: '[email protected]',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdc,
    First_Name: 'Mahesh',
    Last_Name: 'Parashar',
    Date_Of_Birth: '1990-08-21',
    e_mail: '[email protected]',
    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://127.0.0.1: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: '[email protected]' } }, 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://127.0.0.1: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://127.0.0.1:27017/";
const firstPost = {
   title : 'MongoDB Overview',
   description : 'MongoDB is no SQL database',
   by: 'tutorials point',
   url: 'https://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://127.0.0.1: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: '[email protected]',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: '[email protected]',
    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://127.0.0.1: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: '[email protected]',
    phone: '9000012345'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fde,
    First_Name: 'Rachel',
    Last_Name: 'Christopher',
    Date_Of_Birth: '1990-02-16',
    e_mail: '[email protected]',
    phone: '9000054321'
  },
  {
    _id: 60c4bbb40f8c3920a0e30fdf,
    First_Name: 'Fathima',
    Last_Name: 'Sheik',
    Date_Of_Birth: '1990-02-16',
    e_mail: '[email protected]',
    phone: '9000012345'
  }
]
广告