如何用Node.js和MongoDB进行CRUD

Node.js和MongoDB带来了非常快速和灵活的开发体验。只要看看我们如何快速而轻松地用Node在MongoDB中创建、读取、更新和删除一个文档。

软件架构师,InfoWorld |

![How to CRUD with Node.js and MongoDB](https://images.idgesg.net/images/article/2017/06/abstract_background_stream_binary_code_coding_command_line_thinkstock_12-100725702-large.jpg)
复制代码

Thinkstock

MongoDB是最早的NoSQL数据存储之一,也是当今最流行的NoSQL数据存储Node.js的JavaScript运行时继续在后端开发中占据主导地位。它们共同构成了一个高度灵活和动态的技术栈。

正如你将看到的,Node.js和MongoDB允许你快速实现基本的应用程序功能,如CRUD(创建、读取、更新和删除)操作。在本文中,我们将使用最新的Node.js MongoDB驱动(3.6以上版本),来看看CRUD的基本原理。

Node.js和MongoDB设置

你需要在你的系统上安装Node.js和MongoDB,以及一个有curl 命令的命令行。(如果你使用的是2018年以来的Linux、MacOS或Windows 10版本,你很可能有curl。)

你可以在这里为你的操作系统下载MongoDB。一旦下载,你可以把它安装为一个服务或作为一个可执行文件运行。无论哪种方式,通过打开一个命令行并运行mongo 命令,确保MongoDB正在运行。如果你没有以服务方式安装,你可能需要将该命令添加到你的路径中)。这使你能够访问在你系统上运行的MongoDB实例。

接下来,确保你安装了Node.js和npm。在命令行中,输入node -v 。如果Node.js已经安装,你会得到版本号。如果没有,去Node.js的下载页面,在你的机器上安装Node。

Curl允许你从命令行中执行简单的HTTP请求。例如,如果你运行curl www.google.com ,你会收到来自Google主页的标记。

创建一个Node.js项目

现在去一个方便的文件夹,在那里你将创建一个新的项目。输入npm init 。对于项目名称,使用node-mongo-intro。你可以接受其他的默认值。

现在添加你需要的依赖项。在你刚刚创建的项目目录中,输入npm install mongodb polka --save 。这将安装MongoDB的Node.js驱动(允许你的项目访问MongoDB)和Polka HTTP服务器,你将用它来处理HTTP请求。

编辑package.json文件,包括一个启动脚本,如清单1所示。

清单1.一个启动脚本

"scripts": {
复制代码

现在创建一个/node-mongo-intro/src/index.js文件,并将清单2的内容放入其中。

清单2.index.js中的HTTP测试

const polka = require('polka');
复制代码

现在用npm run start 启动服务器。该服务器将监听3000端口。你可以用curl http://localhost:3000/create 来测试它。如果你这样做,你应该看到 “works “的响应(连同一些curl请求信息)。

在MongoDB中插入一条记录

现在我们要执行一个简单的插入。这就是CRUD中的C。更新index.js 文件,使其看起来像清单3。

清单3.一个简单的插入

const polka = require('polka');
复制代码

清单3中的代码在你的本地系统上打开一个与MongoDB实例的连接,然后指定一个数据库("intro" )和集合("quotes" )。一个集合类似于关系数据库中的一个表。

接下来,代码会插入一个文档(类似于SQL记录),并将结果以HTTP响应的方式发送回来。

运行插入程序

首先,按Ctrl-C键,停止并重启节点服务器。然后在命令行上运行这个命令。

npm run startcurl http://localhost:3000/create
复制代码

验证插入

如果你有SQL背景,你会注意到一件事,那就是我们在做这项工作之前,并没有创建一个表和模式。我们甚至没有创建我们使用的数据库。MongoDB为我们做了这一切,而且它可以接受任何种类的结构化键值文件进入集合。

mongo ,打开mongo shell,然后输入命令use intro 。这将切换到自动创建的介绍数据库。现在输入db.quotes.find() 命令,你会看到记录被插入了。注意,MongoDB在"_id" 字段上自动生成了一个唯一的ID。你可以通过自己在文档上指定一个ID来覆盖它。

在MongoDB中检索一个文档

现在让我们把文档拿回来。添加清单4中看到的.get() 映射。这就是CRUD中的R。

清单4.检索一个文档

.get('/retrieve', (req, res) => {
复制代码

清单4以与清单3相同的方式进行连接,然后发出一个find 命令,其中有一个空查询。这意味着它匹配所有的文档。接下来,它获取响应,并将其编入一个数组,然后发回给客户端。

注意游标操作是异步的,就像清单3中的collection.insertOne 操作一样。我们使用await 关键字来处理这些操作,没有嵌套的回调。

curl http://localhost:3000/retrieve 测试新的端点(在停止和再次启动服务器之后),你会看到集合被返回。

在MongoDB中更新一个文档

现在是CRUD中的U。这在清单5中进行了处理。

清单 5.更新一个文档

.get('/update', (req, res) => {
复制代码

清单5再次连接到数据库,然后创建一个更新文档。这个文档通过指定一个$set 字段来告诉MongoDB要改变什么,该字段包含一个带有要改变的字段和值的对象。在我们的例子中,我们将author 字段设置为"John Lennon" ,即有关报价的报价人。

接下来,清单5使用updateOne() 函数来执行更新文件。最后一个空对象的参数是过滤器。在这种情况下,我们想在所有文件上进行匹配,所以我们把它留空。

最后,我们送回我们更新的文档的数量(一个)。

在MongoDB中删除一个文档

CRUD缩写中的最后一个字母是D,代表删除。

删除操作的映射在清单6中显示。

清单 6.删除一个文档

.get('/delete', (req, res) => {
复制代码

这里我们再次使用一个空查询来匹配"quotes" 集合中的所有文档。Asynccollection.deleteOne() 函数返回一个结果,告诉我们有多少文档受到影响。

重新启动服务器(Ctrl-C)并发出一个新的curl命令。

curl http://localhost:3000/delete
复制代码

You can verify the doucument has been deleted with `curl http://localhost:3000/retrieve`.

Dynamic CRUD duo

And there you have it, the full lifecycle for a document in the MongoDB data store: create, read, update, and delete.

The Node.js and MongoDB combo (with some help from Polka) makes for a very fast and flexible development experience. Learn more about Node.js [here](https://www.infoworld.com/article/3210589/what-is-nodejs-javascript-runtime-explained.html) and more about MongoDB and other NoSQL data stores [here](https://www.infoworld.com/category/nosql/).

`

Related:

Matthew Tyson is a founder of Dark Horse Group, Inc. He believes in people-first technology. When not playing guitar, Matt explores the backcountry and the philosophical hinterlands. He has written for JavaWorld since 2007.

Follow

Copyright © 2021 IDG Communications, Inc.

`

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享