当前位置: 首页 > 后端技术 > Node.js

Mongodb数据库的基本操作

时间:2023-04-03 23:28:28 Node.js

mongodb是一个文档型数据库,其官网地址为https://www.mongodb.com/。我们从官网下载软件包并完成安装。比如我们可以设置安装路径为D:\MongoDB\mongodb。我们安装完成后,可以看到该目录下的bin文件夹下有如下文件:接下来我们配置环境变量,以便能够运行任意目录下bin文件夹下的应用程序。我们在环境变量的用户变量中新建一个名为Mongodb的变量,其变量值为D:\MongoDB\mongodb\bin。接下来,在用户变量中编辑PATH变量的值,并添加;%Mongodb%;在它的价值之后。最后,确保环境变量配置完成。接下来在cmd中输入command->mongo,显示如下结果,说明安装配置成功。这里可以看到我们安装的mongodb的版本号可以正确显示,这里显示连接失败是因为我们还没有开始对数据库的操作。1、Mongodb数据库的启动和连接由于mongodb是文档型数据库,所以不同于mysql等数据库。它的数据库是真实可见的,和我们本地机器上的物理文件一一对应。因此,我们需要先创建一个文件夹,作为实际存放数据库的位置。比如我们在D盘根目录下创建一个名为mongo的文件夹,那么数据库文件所在文件夹的绝对物理路径就是D:\mongo。接下来我们打开cmd,输入启动命令->mongod--dbpathD:\mongo。这时候可以看到最后一行控制台在27017端口输出了waitingforconnections,说明此时数据库已经完成了启动操作。这时我们新建的mongo文件夹下多了如下默认文件:启动命令中--dbpath用于选择数据库文件所在的文件夹,也就是数据库真正的存放位置。在这个文件夹下,所有后缀为.ns的文件都是数据库,即mongodb中的数据库是真正可见的,物理文件和数据库是一一对应的。完成数据库的启动操作后,我们一定要让cmd面板保持上图所示状态,不能关闭或退出程序。一旦这个cmd出现问题,我们的数据库就自动关闭了。我们后续的数据库操作需要再打开一个cmd。接下来,我们再打开一个cmd,输入command->mongo连接数据库。当显示如下时,表示数据库连接成功。接下来我们进入了mongodb的语法环境,在这里我们可以输入命令来操作数据库。我们使用命令->showdbs来显示当前所有的数据库。(现在只有一些系统默认的数据库文件,系统自带的这些文件我们不做任何操作。)我们使用命令->usetest表示使用某个数据库,使用非-现有数据库创建一个新的。然后使用命令->db查看当前数据库。我们完成test数据库的创建之后,我们使用->showdbs查看当前所有的数据库,但是还是看不到我们创建的数据库,也就是说我们要想成功创建这个数据库,必须插入一块的数据。mongodb的一个数据库是由很多集合组成的,类似于mysql数据库中数据表的概念,每个集合由很多文档组成。每个文档都是一个json对象,文档类似于mysql数据表中字段的概念。数据不能直接插入到数据库中,只能插入到数据库的指定集合中。不需要创建集合。一旦我们向某个集合中插入数据,就相当于创建了一个新的集合,集合中也有新的集合。相应的数据。我们在cmd中使用命令->db判断当前数据库是test,然后使用命令->db.student.insert()向集合中插入一个json对象。这个操作完成了student集合的创建和test数据库中插入一条文档数据。接下来可以使用命令->showcollections列出当前数据库中的所有集合(其中system.indexes是系统默认的集合,不作任何处理)。使用命令->db.student.find()可以列出当前数据库中student集合中的所有文档数据。如下图所示:此时可以看到mongo文件夹下多了两个文件test.0和test.ns。每条文档数据都是一个json数据,插入文档时要符合严格的json语法。数据库中的每条文档数据都会被分配一个唯一的_id属性值。2、MongoVUE的使用MongoVUE是Mongodb的可视化管理工具。我们安装完成后,手动启动MongoVUE.exe进入其管理界面。首次使用时,在弹出的连接Mongo数据库中选择新建,填写如下信息:我们在服务器中填写127.0.0.1,即连接本地数据库。当输入指定的IP地址时,也可以用来连接远程数据库。port端口号默认27017,保存后选择连接。我们必须在完成数据库的启动操作后使用MongoVUE连接数据库,否则会显示连接失败。连接完成后,我们可以看到:在面板的左侧边栏中,可以看到我们当前所有的数据库,其中admin和local是系统默认的数据库,我们不做任何处理。其中test就是我们新建的数据库。在里面的Collections分支下可以看到数据库下的所有集合。选择studentcollection(不用展开)右键选择View,在右侧面板可以看到三种类型Views可以选择显示这个集合中的所有文档和数据。我们一般在cmd中进行数据库的增删改查操作,在可视化面板中查看数据库中数据的存储情况,即在命令行中进行控制操作,在可视化工具中进行校验。由于可视化工具不能自动刷新,所以我们完成操作后,需要点击面板左侧的Refresh进行刷新,然后选择一个集合右键View查看最新的文档数据。三、Mongodb数据库的增删改查操作1、导入数据以往test数据库的studentcollection中我们都是插入一段文档数据,但是这次在控制台导入数据的效率太低了方式。我们一般在外部编辑器中将一个集合中的文档数据以json文件的形式进行编辑,然后全部导入到数据库中的某个集合中。执行导入操作时,再打开一个cmd,然后使用命令->mongoimport--db数据库名--collection集合名--drop--filejson文件的绝对物理路径执行导入操作。上面的命令中,如果数据库和集合名都不存在,那么新建操作也完成了。我们在外部编辑器中编辑json文件。后缀为.json的文件必须严格遵守json格式。键值必须能加双引号。如果值为字符串类型,还必须加上双引号。直接将文件拖入cmd,会自动显示json文件的绝对物理地址。--drop表示在将数据导入集合之前清除集合。2、查询操作数据导入完成后,我们回到之前连接数据库的cmd,使用命令->db查看当前使用的数据库为test,然后使用命令->db.student.find()查询当前数据库的学生集合。如果find方法中没有参数,则会列出集合中的所有文档对象。find方法可以传入一个json对象(这里也需要遵循严格的json语法)来表示查询条件。如果有多个条件,在这个对象中,用逗号分隔的键值对代表查询条件之间的关系。如果找到,则输出相应的文件,如果没有找到,则不输出结果,也不会报错。我们将{$gt:}添加到查询对象的属性值以指示大于符号,并添加{$lt:}以指示小于符号。例如输入命令->db.student.find({"score.Math":{$gt:74}})表示查询数学成绩大于74分的文档对象。我们在查询对象中加入$or:[]来表示数组中每个查询条件之间的OR关系,每个查询条件用一个json对象来表示。例如,键入命令->db.student.find({$or:[{"age":9},{"score.Math":70}]})表示年龄为9岁或找到数学成绩为70分的文档对象。调用find方法查询后,我们可以调用sort()方法对查询结果进行排序。属性值为1表示升序,属性值为-1表示降序。比如输入命令->db.student.find().sort({"score.Math":1,"age":-1})表示查询集合中的所有文档数据,先进行排列按照数学成绩升序排列。如果数学成绩相同,则按年龄倒序排列。(当有多个排序条件时,依次确定排序条件的优先级)3、删除操作键入命令->db.dropDatabase()删除当前数据库。键入命令->db.student.drop()以删除当前数据库中的学生集合。使用命令->db.student.remove()传入一个查询对象,删除集合中所有满足查询条件的文档,如->db.student.remove({"age":9})All年龄为9的文档将被删除。如果添加了{justOne:true},则只会删除第一个匹配的文档。比如->db.student.remove({"age":9},{justOne:true})。使用->db.student.remove({})删除集合中的所有文档,达到清空集合的目的。这时必须传入一个空对象。4.修改(更新)操作我们使用command->db.student.update()方法来修改文档。第一个参数对象代表查询条件,第二个参数对象为修改条件。例如输入命令->db.student.update({"name":"xiaohong"},{$set:{"age":18}})将名为小红的文档中的年龄改为18岁。当第一个查询条件匹配多个文档,默认只修改第一个文档数据。如果要批量修改,需要加上{multi:true},即->db.student.update({"name":"xiaohong"},{$set:{"age":18}},{多:真})。如果没有$set关键字,表示替换文档。例如->db.student.update({"name":"xiaohong"},{"age":18}),表示将所有名字为Xiaohong的文档替换为{"age":18}。5.获取集合中文档对象的总数,使用命令->db.student.stats().count或->db.student.find().count()显示文档对象的个数当前数据库总数的学生集合。