【MongoDB】MongoDB基本入门01

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值