zoukankan      html  css  js  c++  java
  • MongoDB数据库的基本操作

    mongodb是文档型数据库,其官网地址为 https://www.mongodb.com/。我们在官网上下载该软件包,并完成安装。如我们可以设置安装路径为D:MongoDBmongodb。我们在完成安装之后,可以看到在该目录的bin文件夹下有如下文件:

     接下去我们配置环境变量,为了能在任意目录下都能运行bin这个文件夹下的应用程序。我们在环境变量的用户变量当中新建一个名为Mongodb的变量,其变量值为D:MongoDBmongodbin。接下去编辑用户变量当中的PATH变量值,在其值后面加上;%Mongodb%;。最后确定关闭完成了环境变量的配置。接下去在cmd当中,键入命令-> mongo,显示如下结果,则说明安装和配置成功

     这里我们可以看到可以正确显示我们安装的mongodb的版本号,在此显示连接失败是因为我们还没进行数据库开机的操作

    一、Mongodb数据库的开机与连接

    由于mongodb为文档型的数据库,它不同于mysql等数据库,它的数据库真实可见,与我们本机上的物理文件一一对应。故我们需要先建立一个文件夹,作为数据库真实存放的位置。比如我们在D盘根目录下新建一个名为mongo的文件夹,则该数据库文档所在文件夹的绝对物理路径为D:mongo
    接下去我们打开cmd,输入开机命令-> mongod --dbpath D:mongo。此时可以看到控制台在最后一行输出waiting for connections on port 27017,则说明此时数据库完成了开机操作。

    此时在我们新建的mongo文件夹下多了如下所示的默认文件:

    在开机命令当中--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.0test.ns这两个文件。每一条文档数据都为一个json数据,插入文档时应该让其符合严格的json语法。数据库当中每一条文档数据都会被分配一个唯一的_id属性值。

    二、MongoVUE的使用

    MongoVUEMongodb的一款可视化管理工具。我们在完成安装之后,手动启动MongoVUE.exe进入其管理界面。在第一次使用时,在弹出框Connect to Mongo Database当中选择新建,填写如下信息:

    我们在server当中填写127.0.0.1,表示连接本地数据库,当输入指定的IP地址还可用于连接远程的数据库。而port端口号为默认的27017即可。保存后选择连接即可。

    我们一定要在完成数据库的开机操作之后,才可以使用MongoVUE对该数据库进行连接,否则会显示连接失败。

    在完成连接之后我们可以看到:

    在该面板的左侧边栏可以看到我们当前所有的数据库,其中adminlocal为系统默认数据库,我们不对其做任何处理。其中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这个集合当中文档对象的总数。

  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/guanyf/p/14842157.html
Copyright © 2011-2022 走看看