04-02.wejwkejiej-test 如何使用MongoDB运行node.js

[总计:2平均:5/5] 当今的许多Web应用程序都将node.js与MongoDB结合使用,以在后端服务器上存储和访问数据。 node.js不仅在访问非关系数据库(如MongoDB)方面出色,而且还为应用程序的服务器端带来了可伸缩性和速度。 随着MEAN(MongoDB,Express,Angular和Node)和MERN(MongoDB,Express,React和Node)堆栈的日益流行,NoSQL数据库(如MongoDB)对CRUD操作的熟练掌握是每个应用程序开发人员都应该拥有的。 幸运的是,它相当简单容易,尤其是在我们为您准备的美味教程中。 教程如何美味? 将Node.js与MongoDB结合使用真的比订购晚餐更简单吗? 继续阅读以找出答案! 在开始烹饪之前,让我们了解一下我们的食材。 Node.js Node.js是用于应用程序后端的JavaScript运行时环境。 Node.js以Google的V8 JavaScript引擎为基础,包含许多Web应用程序实现所必需的组件和功能。 Node.js的主要优势之一是其事件驱动的异步引擎的可扩展性。 由于它继续执行队列中的其他任务,而不是等待客户端响应,因此它可以并行执行更多的操作,因此速度更快。 此外,Node.js支持使用npm工具快速安装第三方软件包和模块,本教程中还将使用该工具来安装MongoDB。 MongoDB MongoDB是一个开源的非关系型数据库,以集合和文档的形式存储数据。 在设计时考虑到敏捷性和可伸缩性,MongoDB集合了关系数据库的丰富功能和键值存储的速度。 MongoDB而不是像关系数据库那样将数据存储在行和列中,而是以具有动态模式的集合的形式存储JSON文档。 将所有相关信息存储在一起可以加快查询速度,而且由于MongoDB还被设计为异步使用,因此它为Node.js应用程序的数据提供了理想的存储库。 在本教程中,我们将在您的本地计算机上安装MongoDB,但是出于生产目的,您可能希望使用MongoDB Atlas云数据库服务。 环境设定 如果尚未这样做,请使用与您的操作系统和处理器匹配的文件在计算机上下载并安装MongoDB。 安装后,从操作系统的命令提示符下运行MongoDB。 如果使用默认设置,则MongoDB侦听的端口将是27017。 现在我们已经准备好食材,是时候烹饪并互相介绍它们了。 1.安装MongoDB npm 无论您有要连接到MongoDB数据库的Node.js项目,还是创建新项目,都需要使用Node.js程序包管理器(npm)安装MongoDB程序包。 为此,请在您选择的IDE中打开一个终端窗口,然后键入: npm install -g mongodb 这会将mongodb安装为全局库,因此您所有的Node.js项目都可以访问它并能够使用它。 2.连接到MongoDB 在您的厨房(后端)和原料就位之后,是时候混合这些口味了。 在您的项目文件夹中创建一个名为server.js的文件。 顾名思义,这将是您的服务器,它将带出您在MongoDB数据库中拥有的餐具(或任何其他类型的数据)。 要允许Node.js作为客户端访问MongoDB,您需要在server.js文件中输入要求。 const {MongoClient} = require('mongodb'); 要将Node.js连接到您计算机上本地运行的实际MongoDB数据库服务器,我们需要指定其URL。 如果您未在设置过程中进行任何更改,则网址应为: const url ='mongodb:// localhost:27017 /'; 使用Node.js在MongoDB上进行CRUD操作 在server.js文件中的上述几行中,我们现在可以访问mongoClient的所有CRUD函数。 CRUD代表创建,读取,更新和删除-您将在数据库上应用的基本功能。 让我们从第一个开始:创作。 1.创建一个MongoDB数据库并将文档添加到集合中 在令人垂涎的Dinner项目中,我们将创建一个可以订购的菜肴数据库。 首先,我们将一个文档(一个盘)添加到数据库中名为盘(dishes)的集合中,我们将(非常不恰当地)命名为ishsdb。 现在介绍如何使用MongoDB和Node.js进行精巧的部分-您无需事先声明数据库和集合的名称。 如果在调用它们时不存在它们,则在将文档插入集合中时将创建它们。 要将美味的菜肴(文档)插入菜单(集合),我们可以使用以下两种方法之一。 要添加一道菜,我们将使用insertOne(),一次添加许多菜,我们将使用insertMany()。 下面的代码一旦执行,将尝试将一个菜“ Greens Fava Salad”添加到数据库dishsdb中的收集菜中。 变量dbo用于引用我们的数据库(dishesdb),并在其中使用collection()方法创建一个名为dishs的集合。 由于我们不会在本教程中使用前端,因此我们将通过终端输出跟踪服务器上发生的情况。 要查看脚本执行的结果,我们将使用console.log()并指定要显示的成功消息-将1个文档插入到收集盘中。 这是一个可将单个菜肴插入我们的数据库dishsdb的函数: 异步函数createOne(dbName,collectionName,newdish){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); 等待client.db(dbName).collection(collectionName).insertOne(newdish); console.log(“将1个文档插入收集盘”); client.close(); } 现在,我们需要做的就是定义一个新菜,然后调用该函数: let newdish = {innerId:1,标题:'Greens Fava Salad',description:'Tossed greens with citrus dressing。',价格:'$ 10'}; 等待createOne('dishesdb','dishes',newdish); 请注意,每次使用client.close()完成交互后,关闭数据库连接都非常重要。 保持开放状态可能是一个安全漏洞,并可能导致错误和故障。 另外,如果您想简化代码并提高性能,则可以使用此方法在整个代码库中共享一个数据库连接。 要对其进行测试,请将上面的代码添加到您的server.js文件中,并在终端中运行node server.js。 如果一切顺利,您应该收到消息–将1个文档插入收集盘中。 将多个项目插入您的收藏中非常相似。 您只需要使用insertMany()而不是insertOne()。 这是一个可将许多菜肴插入我们的数据库dishsdb的功能: 异步函数createMany(dbName,collectionName,mydishes){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const res =等待client.db(dbName).collection(collectionName).insertMany(mydishes); console.log(“已添加菜数:”,res.insertedCount); client.close(); } 现在,我们需要做的就是定义一些菜式,然后调用该函数: 让mydishes = [ {innerId:2,标题:“季节性南瓜汤”,描述:“热和填充泰国南瓜汤。”,价格:“ $ 13”}, {innerId:3,标题:“ Fresh Vegetables”,描述:“带橄榄油和皮的新鲜蔬菜。”,价格:“ $ 10”}, {innerId:4,标题:“ New York Cheesecake”,描述:“ Delicious Cheesecake,配以时令水果。”,价格:“ $ 20”}, {innerId:5,标题:“ Chocolate Doughnut”,描述:“我们厨师的巧克力甜甜圈食谱。”,价格:“ $ 15”}, {innerId:6,标题:“西瓜鸡尾酒”,描述:“清淡的酒精鸡尾酒以清洁您的托盘。”,价格:“ $ 17”} ]; 等待createMany('dishesdb','dishes',mydishes); 如您所见,除了每个菜的标题和描述之外,我们还为菜/文件添加了自己的唯一标识符(innerId),以防止我们的Dinner菜单的标识方案与文档的MongoDB索引之间出现混淆。 现在,我们已经在数据库中存储了一些文档,现在可以阅读它们了。 2.从MongoDB数据库读取 要从数据库读取,可以使用find()和findOne()。 要获取集合的所有内容,我们可以使用find()而不使用任何限定查询。 这是一个使用find()函数在数据库dbName中查找collectionCollectionName的所有文档的函数。 异步函数locateAll(dbName,collectionName){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const result = await client.db(dbName).collection(collectionName).find({})。toArray(); console.log(result); client.close(); } 对数据库餐具数据库和收集餐具运行此功能如下所示: 等待locateAll('dishesdb','dishes'); 结果将是当前在“菜肴”集合中列出的所有6种菜肴。 我们可以通过向find()函数添加查询来使搜索更加具体。 例如,这是一个函数,除了dbName和collectionName之外,还接受特定的查询。 异步函数locateByQuery(dbName,collectionName,myQuery){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const result = await client.db(dbName).collection(collectionName).find(myQuery).toArray(); console.log(result); client.close(); } 这是我们定义查询的方法,以查找所有价格为10美元的菜品,然后调用该函数。 让myquery = {price:'$ 10'}; 等待waitByQuery('dishesdb','dishes',myquery);
如果我们只想查找一个特定的文档,则可以使用findOne()。 它的工作原理与find()差不多,只是它将始终返回一个对象–第一个与查询匹配的文档。 因此,如果将上面的代码更改为findOne()而不是find(),我们将仅获得菜单上的第一项商品,价格为10美元。 以下是函数locateOneByQuery(): 异步函数locateOneByQuery(dbName,collectionName,myQuery){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const result = await client.db(dbName).collection(collectionName).findOne(myQuery); console.log(result); client.close(); } 3.更新MongoDB数据库中的文档 CRUD中的下一个操作是Update,顾名思义,它使我们可以更新MangoDB数据库集合中的文档。 与创建和阅读非常相似,可以单次或批量完成文档更新。 要更新一个文档,我们可以使用updateOne()和updateMany()一次更改多个文档中的值。 使用updateMany(),您可以更改与查询匹配的多个文档的值。 updateOne()将更新第一个文档以使其与我们的馆藏相匹配。 这是一个用于更新一个文档的函数,该文档除了查询和新值外还需要dbName和collectionName: 异步函数renewOneByQuery(dbName,collectionName,myQuery,newValue) { const client = await MongoClient.connect(url,{useNewUrlParser:true}); const res =等待client.db(dbName).collection(collectionName).updateOne(myQuery,newValue); console.log(“文档数量已更新:”,res.result.nModified); client.close(); } 例如,让我们通过更新名称和描述来增加汤的吸引力。 在“季节性南瓜汤”中,我们将名称更改为“秋天南瓜汤”,并在说明中包含有关汤的独特属性的一些详细信息。 这样做的代码如下所示: let newQuery = {title:'季节性南瓜汤'}; let newValue = {$ set:{标题:“秋天南瓜汤”,描述:“热和装满孟加拉南瓜汤。” }}; 等待renewOneByQuery('dishesdb','dishes',newQuery,newValue); 如此开胃的名字和描述,我们的菜似乎价格低廉,您同意吗? 因此,让我们提高一些价格。 为了将所有价格从“ $ 10”更改为“ $ 20”的菜肴的价格,让我们创建一个函数,该函数根据给定的查询一次更新许多文档。 函数代码如下所示: 异步函数renewManyByQuery(dbName,collectionName,myQuery,newValue){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const res =等待client.db(dbName).collection(collectionName).updateMany(myQuery,newValue); console.log(“文档数量已更新:”,res.result.nModified); client.close(); } 定义查询和新值的代码如下所示: 让newQuery = {price:'$ 10'}; let newValue = {$ set:{price:'$ 20'}}; 等待renewManyByQuery('dishesdb','dishes',newQuery,newValue); 这会将菜1和3的价格从10美元更新为20美元。 4.从MongoDB数据库中删除文档 CRUD中的D代表删除,因此这是我们要讨论的最后一个功能。 与创建,读取和更新一样,我们可以使用deleteOne()和deleteMany()删除一个或多个文档。 要从菜单中删除单个项目,在这种情况下,该项目的innerId值为1,我们首先将此函数添加到我们的server.js文件中: 异步函数removeOneByQuery(dbName,collectionName,myQuery){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const obj = await client.db(dbName).collection(collectionName).deleteOne(myQuery); console.log(“文档已删除:”,obj.result.n); client.close(); } 然后,我们将调用以下函数: 让myQuery = {innerId:1}; 等待removeOneByQuery('dishesdb','dishes',myQuery);
就像删除一个文档一样,我们可以删除多个文档。 这是删除所有适合给定查询的文档的功能: 异步函数removeManyByQuery(dbName,collectionName,myQuery){ const client = await MongoClient.connect(url,{useNewUrlParser:true}); const obj = await client.db(dbName).collection(collectionName).deleteMany(myQuery,newValue); console.log(“文件已删除:”,obj.result.n); client.close(); } 在这种情况下,我们将在不指定任何查询的情况下调用该函数,因此调用该函数将删除餐具集合中的所有文档: 等待removeManyByQuery('dishesdb','dishes',{}); 通过这些命令,我​​们几乎涵盖了将MongoDB与Node.js结合使用所需的所有知识。 下一步(一旦您吃了一些快吃的东西来满足我们刚给您的吃惊的感觉),就是添加一个前端和Express.js,以将您的应用程序与我们刚刚创建的后端互连。 有了这些功能,您就可以将我们烹制的Dinner扩展为具有视觉效果和UX的网络应用程序,以使用户垂涎三尺。 分享此:推文

from: https://blog.codota.com/how-to-run-node-js-with-mongodb-2/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值