mongodb
是文档型数据库,其官网地址为 https://www.mongodb.com/。我们在官网上下载该软件包,并完成安装。如我们可以设置安装路径为D:\MongoDB\mongodb
。我们在完成安装之后,可以看到在该目录的bin
文件夹下有如下文件:
接下去我们配置环境变量,为了能在任意目录下都能运行bin
这个文件夹下的应用程序。我们在环境变量的用户变量当中新建一个名为Mongodb
的变量,其变量值为D:\MongoDB\mongodb\bin
。接下去编辑用户变量当中的PATH
变量值,在其值后面加上;%Mongodb%;
。最后确定关闭完成了环境变量的配置。接下去在cmd
当中,键入命令-> mongo
,显示如下结果,则说明安装和配置成功。
一、Mongodb数据库的开机与连接
由于mongodb
为文档型的数据库,它不同于MysqL
等数据库,它的数据库真实可见,与我们本机上的物理文件一一对应。故我们需要先建立一个文件夹,作为数据库真实存放的位置。比如我们在D
盘根目录下新建一个名为mongo
的文件夹,则该数据库文档所在文件夹的绝对物理路径为D:\mongo
。
接下去我们打开cmd
,输入开机命令-> mongod --dbpath D:\mongo
。此时可以看到控制台在最后一行输出waiting for connections on port 27017
,则说明此时数据库完成了开机操作。
在开机命令当中
--dbpath
用于选择数据库文档所在的文件夹,是数据库真实存放的位置。在该文件夹下,所有以.ns
为后缀名的文件都为数据库,即mongodb
中数据库真实可见,有物理文件与数据库一一对应。
在完成数据库的开机操作之后,我们一定要让这个cmd
面板保持上图所示的状态,不能关闭,不能退出程序。一旦该cmd
出现问题,我们的数据库就自动关闭了。我们后续的数据库操作需要再开一个cmd
。
接下去我们再开一个cmd
,输入命令-> mongo
用于连接数据库。当显示如下所示,则说明数据库连接成功。
接下去我们就进入了mongodb
的语法环境下,可以输入命令进行数据库的操作。
我们用命令-> show dbs
来显示当前所有的数据库。(现在只有一些系统默认的数据库文件,这些系统自带的文件,我们不做任何操作)
我们用命令-> use test
来表示使用某个数据库,当use
一个不存在的数据库则表示新建。之后再用命令-> db
来查看当前所在的数据库。我们在完成test
数据库的新建之后,用-> show dbs
查看现在所有的数据库,仍然看不到我们新建的那个数据库,说明我们想把这个数据库新建成功,则必须往里面插入一条数据。
mongodb
的某个数据库由很多个集合(collection
)组成,集合类似于MysqL
数据库当中数据表的概念,而每一个集合又由很多个文档(document
)构成。每一个文档都是一个json
对象,文档类似于MysqL
数据表当中字段的概念。数据库当中不能直接插入数据,只能往该数据库的某个指定集合当中插入数据,集合不需要新建,一旦我们往某个集合当中插入数据,就相当于新建了这个集合,并且该集合当中也有了对应的数据。
我们在cmd
当中用命令-> db
来确定当前所在的数据库为test
,接下去用命令-> db.student.insert()
往该集合当中插入一个json
对象。这句操作完成了在test
数据库中student
这个集合的创建与一条文档数据的插入。接下去可用命令-> show collections
来列出当前这个数据库当中所有的集合(其中system.indexes
为系统默认的集合,不做任何处理)。用命令-> db.student.find()
来列出当前这个数据库中student
这个集合当中所有的文档数据。如下图所示:
此时可以看到
mongo
这个文件夹下多了test.0
与test.ns
这两个文件。每一条文档数据都为一个json
数据,插入文档时应该让其符合严格的json
语法。数据库当中每一条文档数据都会被分配一个唯一的_id
属性值。
二、MongoVUE的使用
MongoVUE
是Mongodb
的一款可视化管理工具。我们在完成安装之后,手动启动MongoVUE.exe
进入其管理界面。在第一次使用时,在弹出框Connect to Mongo Database
当中选择新建,填写如下信息:
我们在server
当中填写127.0.0.1
,表示连接本地数据库,当输入指定的IP
地址还可用于连接远程的数据库。而port
端口号为默认的27017
即可。保存后选择连接即可。
在完成连接之后我们可以看到:
在该面板的左侧边栏可以看到我们当前所有的数据库,其中admin
与local
为系统默认数据库,我们不对其做任何处理。其中test
是我们新建的数据库,在其内部的Collections
的分支下可以看到该数据库下所有的集合,选中student
这个集合(不用对其再展开)右键选择View
则可以在右侧面板看到有三种视图可供选择,可以显示这个集合当中所有的文档及数据。
我们一般在
cmd
当中进行数据库的增删改查的操作,在可视化面板当中查看数据库当中数据的存储情况,即在命令行当中进行控制操作,在可视化工具当中进行验证。由于可视化工具不能自动刷新,我们在完成操作之后,需要点击面板左侧的Refresh
刷新,然后再选中某个集合右键View
才可以查看最新的文档数据。
三、Mongodb数据库的增删改查操作
1、导入数据
我们之前操作过往test
数据库的student
集合当中插入一条文档数据,但是用这种方式在控制台当中完成数据导入效率太低。我们一般把一个集合当中的文档数据用json
文件的形式在外部编辑器当中编辑完成之后,统一全部导入数据库的某个集合当中。
在进行导入操作时,要再开一个cmd
,然后用命令-> mongoimport --db 数据库名 --collection 集合名 --drop --file json文件的绝对物理路径
来进行导入操作。
在上述命令当中,如果数据库与集合名均为不存在的,则一并完成了新建的操作。我们在外部编辑器当中完成
json
文件的编辑,后缀名为.json
的文件必须能严格遵守json
格式,key
值必须能加双引号,value
值若为字符串类型,也必须加双引号。直接把该文件拖进cmd
当中,则自动显示该json
文件的绝对物理地址。--drop
表示为在往该集合当中导入数据之前先清空这个集合。
2、查询操作
在完成数据的导入之后,我们回到之前连接数据库的那个cmd
当中,用命令-> db
来查看当前的使用的数据库为test
,接下去用命令-> db.student.find()
来对当前这个数据库的student
集合进行查询操作。若find
方法当中没有参数则列出该集合当中所有的文档对象。
可以在find
方法当中传入一个json
对象(这里同样需要遵循严格的json
语法)表示查询条件。如果有多个条件则在该对象当中,用逗号相隔的键值对表示查询条件之间且的关系。若找到了则输出对应的文档,若没找到则不输出结果,也不会报错。
我们给查询对象的某个属性值加上{$gt:}
表示大于符号,{$lt:}
表示小于符号。如键入命令-> db.student.find({"score.Math":{$gt:74}})
表示查询出数学成绩大于74
分的文档对象。
我们在查询对象当中加上$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()
即可删除当前这个数据库当中student
这个集合。使用命令-> db.student.remove()
当中传入一个查询对象则可以把该集合当中符合该查询条件的文档都删去,如-> db.student.remove({"age":9})
则会删调年龄为9
的所有文档,如果加上{justOne:true}
则只删第一个匹配上的文档。如-> db.student.remove({"age":9},{justOne:true})
。使用-> db.student.remove({})
可以删除该集合当中的所有文档,达到清空该集合的目的,此时必须能传入一个空对象才行。
4、修改(update)操作
我们使用命令->db.student.update()
方法进行文档修改操作。第一个参数对象表示查询条件,第二个参数对象为修改的条件。如键入命令->db.student.update({"name":"xiaohong"},{$set:{"age":18}})
则把名字为小红的文档当中的年龄改为18
。当第一个查询条件匹配上多条文档时,默认只对第一条文档数据进行修改,如果想要批量修改,则要加上{multi:true}
,即->db.student.update({"name":"xiaohong"},{$set:{"age":18}},{multi:true})
。
如果没有$set
这个关键字,则代表替换文档。如->db.student.update({"name":"xiaohong"},{"age":18})
,则表示把名字为小红这个文档全部替换为{"age":18}
。
5、获取集合当中文档对象的总数
使用命令-> db.student.stats().count
或者-> db.student.find().count()
均可显示出当前数据库的student
这个集合当中文档对象的总数。