【MongoDB】MongoDB基本入门01

来源:互联网 发布:搜索文件软件 编辑:程序博客网 时间:2024/06/11 21:34

NoSQL简介

NoSQL(Not Only SQL),意即“不仅仅是SQL”,指的是非关系型的数据库。

  • 非关系型数据库的优点:
    • 1、简单的扩展(以键值对的方式存储,结构比较灵活)
    • 2、快速的读写
    • 3、低廉的成本
    • 4、灵活的数据模型
  • 缺点:

    • 1、不提供SQL的支持
    • 2、支持的特性不够丰富(没有事务等这些概念)
    • 3、现有的产品不够成熟(相对于关系型数据库而言)
  • 关系型数据库和MongoDB逻辑结构关系对比

    • 关系型数据库:
      • MySQL数据库(database),表(table)、记录(rows)三个层次概念组成。
    • MongoDB:
      • Mongodb数据库(database)、集合(collection)、文档对象(document)三个层次概念组成。MongoDB里的集合对应于关系型数据库里的表,一个文档就相当于一条记录。
      • 其中MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。
      • 同时MongoDB自带JavaScript shell,这个工具对于管理MongoDB实例的操作数据库作用非常大。
      • 同时每一个文档(每条记录)都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于数据库中的表的主键。

安装MongoDB

我们只需要下载解压MongoDB之后,将环境变量配置到bin目录级别:D:\Program Files\mongodb\bin即可。


服务器端启动MongoDB

我们需要现在D盘新建一个名为mongodbpath的文件夹,然后执行如下命令:
mongod --dbpath=D:/mongodbpath


客户端连接MongoDB

我们使用如下命令:mongo localhost:27017,我们也可以直接使用mongo命令直接进行连接默认以本机作为服务端时且端口号为默认端口的MongoDB。


客户端一些常用操作命令

命令 功能 db 用于查看当前操作的文档(数据库) show dbs 查看所有数据库 use DATABASE_NAME 无则创建数据库,有则切换到数据库 db.dropDatabase() 删除当前数据库 show collections/show tables 查看当前数据库中所有的集合 db.createCollection(‘youxin’) 显示创建名为youxin集合(类似于数据库中的表) db.c1.insert({name:’gebilaowang’,age:29}) 创建名为c1的集合 db.c2.remove({age:0}) c2集合移除age为0的记录

MongDB查询

  • db.c1.find({name:’wangwu},{age:1}):表示查询c1集合条件为name=’wangwu’,返回结果字段为age字段;
  • db.c2.find().count():查询当前集合有多少条记录;
  • db.c2.findOne():查询当前集合的第一条记录;
  • db.c2.find({age:{$gt:5}}):查找c2集合中age大于5的记录
  • db.c2.find({age:{$gte:5}}):查找c2集合中age大于或等于5的记录
  • db.c2.find({age:{$lt:5}}):查找c2集合中age小于5的记录
  • db.c2.find({age:{$lte:5}}):查找c2集合中age小于或等于5的记录
  • db.c2.find({age:{$ne:5}}):查找c2集合中age不等于5的记录
  • db.c2.find().skip(0).limit(10):从第1条开始查询10条记录。
  • db.c5.find({age:{$all:[15,55]}}):查找c2集合中age字段包含15和55。
  • db.c2.find({age:{$in:[15,55]}}):查找c2集合中age字段包含15或55。
  • db.c2.find({age:{$nin:[15,55]}}):查找c2集合中age字段不包含15也不包含55。
  • db.c2.find({$or:[{name:'liuyang'},{age:{$in:[15,55]}}]}):表示name=’liuyang’或者age为15或者age为55。
  • db.c2.find({name:{$exists:1}}):查询c2中包含name字段的记录。

MongoDB中的游标

  • var i = db.c2.find():获取游标
  • i.hasNext():判断是否存在值
  • i.next():获取值

MongoDB更新操作

  • 语法:db.collection.update(criteria,objNew,upsert,multi)
  • 参数说明
    • criteria:用于设置查询条件的对象
    • objNew:用于设置更新内容的对象
    • upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
    • multi:如果有多个符合条件的记录,是否全部更新,取值为0或1
更新命令 功能 db.c1.update({age:33},{name:’wanglihong’}); 表示c1集合中第一个匹配age=33的记录,将name改为wanglihong,但这种改法会使其他字段覆盖 db.c1.update({age:33},{$set:{name:’xiaohuahua’}}) 表示c1集合中第一个匹配age=33的记录,将name改为xiaohuahua,这个只设置name字段,不覆盖其他属性 db.c1.update({name:’xiaoxue’},{$set:{age:25}},0,1) 表示的c1集合全部记录匹配name=’xiaoxue’,将会进行全局更新 db.c1.update({name:’xiaoxue’},{$set:{age:25}},1,1) 表示更新的记录没有找到就新增一条 db.c2.update({name:’zhangsan’},{$inc:{age:1}},0,1) 表示更新c2集合中name为zhangsan的字段,然后将age的值全部加1 db.c2.update({name:’zhangsan’},{$unset:{age:1}},0,1) 表示更新c2集合中name为zhangsan的字段,然后将age这个字段去除掉

MongoDB索引

//往c3集合插入500万条数据for(var i=1;i<=5000000;i++) {    db.c3.insert({name:'hushiyang',age:i});}//查询信息结果:db.c3.find({age:100}).explain()//结果:{    "cursor" : "BasicCursor",    "isMultiKey" : false,    "n" : 1,    "nscannedObjects" : 5000000,    "nscanned" : 5000000,    "nscannedObjectsAllPlans" : 5000000,    "nscannedAllPlans" : 5000000,    "scanAndOrder" : false,    "indexOnly" : false,    "nYields" : 11,    "nChunkSkips" : 0,    "millis" : 8977,        //用时8秒多    "indexBounds" : {    },    "server" : "DESKTOP-D2BBINO:27017"}//c3集合age字段创建索引db.c3.ensureIndex({age:1})//创建唯一索引:则age不允许有重复的值db.c3.ensureIndex({age:1},{unique:true})//删除索引db.c3.dropIndex({age:1})

MongoDB的数据备份

  • 查看数据库的相关操作:
    • db.help()
  • 备份数据库:
    • 将当前主机中的itcast数据库备份至D盘itcast文件夹下
    • mongodump -h localhost:27017 -d itcast -o D://itcast
  • 删除数据库:
    • db.dropDatabase()
  • 恢复数据库:
    • mongorestore -h localhost:27017 -d itcast -directoryperdb D://itcast/itcast
  • 集合中数据导出:
    • 将itcast数据库中的c1集合拷贝到d://itcast中的c1.xls文件中去
    • mongoexport -h localhost:27017 -d itcast -c c1 -o d://itcast/c1.xls
  • 集合中数据导入
    • 将集合备份数据导入到person集合中
    • mongoimport -h localhost:27017 -d itcast -c person d://itcast/c1.xls