当前位置: 首页 > Web前端 > HTML

node环境下使用Mongoose操作MongoDB

时间:2023-03-28 17:46:34 HTML

一、准备工作在create-react-app脚手架工具的src文件夹下创建pages/Server/server.js做前期准备。2、安装前置文件yarnaddmongoose、yarnaddexpress、yarnaddnondemon3、概念明确,我们要知道要使用mongoDB数据库,首先要启动mongoddb服务。默认地址是localhost:27017才可以操作数据库。这里首先要区分和通过nodeexpress创建端口号的区别。对于前端发起的请求,比如get、post等方法,如果直接发送到localhost:27017,数据库是无法处理这些数据的,上面也没有响应这些方法的API。不然你要后端做什么,你的前端直接跟服务器通信就可以了,后端就没有存在的意义了。那我们该怎么办呢?拿不到数据就不能下班。这个时候就需要后端做中间人。后端语言可以只用来识别前端发送的请求,也可以访问数据库。这不就是个媒人吗?server.js文件是写后端代码的地方,设置不同的端口号和请求方式来区分数据库中的数据类型。比如买车,车里有轿车,也有跑车。那么后端可以先区分出汽车的端口号1000,跑车的端口号2000,然后再细分,方便快捷的获取不同类型的数据。而localhost:2701727017只是为了后台找数据库。你的前端知道这个地址是没有用的(你可以暂时这么理解)因为你js语言写的代码是数据库无法识别的。4.链接mongoDB我们都知道mongoDB有一个可视化软件罗盘。任何可视化软件的过程都是由底层代码执行的。你必须先明白这一点。那么你就很容易掌握我在写代码的时候应该按照什么顺序来完成前期工作。一进来这里,我们需要选择链接到一个服务地址。那么我们对应的代码第一步就是链接。链接完成后,我们将创建一个数据库。Mongoose提供了三个最重要的对象,Schema、Model和Document。这三个模块的使用顺序必须是Schema、Model、Document。Schema相当于约束了这个集合中必须有的值,否则整个数据库就乱了。如果你想使用它,你必须先介绍它。这里可以选择es6结构体赋值或者变量赋值。首先要明确一点,你的数据库中不可能只有一个集合,所以不同集合的Schema也是不一样的。这时候就需要单独设置了。模式是一个构造函数。你定义的userInfoSchema实例化它,变量名随便定义,这不是最终的集合名称。请注意,在此步骤中,您仅指定集合文档中需要包含的内容,而不是创建集合。下一步是创建一个集合。我们需要使用第二个重要的对象Model模型方法来接受两个参数。第一个是你的集合的最终名称,第二个参数是集合的架构。此处与直接在mongodDBshell中略有不同。你在shell中直接根据集合名进行操作,比如db.userInfo.insert({}),但是在mongoose中,他并没有直接使用集合来操作,而是使用你前面的变量名。通常我们可以将其设置为与集合同名即可。但是此时由于userinfo集合中没有文档,这个集合还没有保存到服务中,所以我们需要创建一个文档对象。注意这里不是collection.insert()方法,而是clooection.create(),使用方法和insert基本一样。可以看到已经成功插入指南针。五。model.find()查询的一些相关条件上面这段的意思是,1.第一个参数:找到userName为admin1的用户列表2.第二个参数:并且只显示userName属性,不显示_id属性,(需要知道的是mongodb默认会返回_id)3.第三个参数:跳过第一个,只显示一个条件结果。4.第四个参数:一个函数,必须填写,第一个结果为err,如果查询失败,将失败的结果返回给第一个参数,如果成功,则返回我们查询的结果第二个参数。为什么这个函数一定要填?因为我们的业务逻辑是在这个回调函数的第二个参数中执行的,你只是找到数据,而不去处理它,那么调用find有什么意义呢?注意find()返回的是一个数组,需要对其进行索引获取内容。docs[1].xxx.findOne直接是一个对象。可以直接使用docs.xxx获取相应的属性。6、文档增删改查的一些方法1.1添加上面可以通过模型向文档中添加一些数据,我们也可以直接通过对文档的操作来添加数据。因为model也是一个构造函数,那么我们直接在model上实例化即可。这时候你查看数据库,发现还没有添加到userInfo集合中。这是因为您刚刚在代码世界中创建了一个变量user_2。如果要将其保存到模型中,则需要调用user_2.save()方法以查看是否插入了一条新数据。1.2更改既然你已经拿到了user_2的实际数据,那么更新就太容易了。您可以通过两种方式做到这一点。1.user_2.update({$set:{userName:"admin3"}});或者更简单直接,提醒我user_2是你实例化的对象,你记不起来了?2我反手直接修改这个对象的属性不就好了吗?.user_2.userName="admin4"但是注意,这一步只是修改代码世界的变量,别忘了执行user_2.save()1.3deleteuser_2.remove()还是那句话,它不建议直接删除数据,而是给需要删除的数据附加一个属性,比如user_2.isdelete=true,然后使用find()方法过滤掉那些为true的isdelete。(这里要注意,如果你的Schema中没有这个属性,则不能添加这个属性)