MongoDB的基本使用

关于MongDB

介绍

MongoDB是一个基于分布式 文件存储的NoSQL数据库;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

NoSQL数据库:泛指非关系型数据库。优点:易扩展,大数据量、高性能,灵活的数据模型,高可用
NoSQL框架体系Nosol整体框架(四层):数据持久层、整体分布层、数据逻辑模型层、接口层

特点

模式自由:可以将不同结构的文档存储到同一个数据库中
面向集合的存储:适合存储JSON风格文件的形式
完整的索引支持:对任何属性都可以索引
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的目的是提供陈宇及自动故障转移
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
丰富的查询:支持丰富的查询表达式,查询指令支持JSON形式的标记,可轻易查询文档中的内嵌的对象及数据
快速的更新:查询优化器回分析查询表达式,生成一个高效的查询计划
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)

基本概念

  • MongoDB:将数据存储为一个文件,以键值对的形式组成
  • 文档类型类似JSON对象,字段值包含其他文档、数组、文档数组
SQL术语MongoDB术语解释说明
databasedatavase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

文档,就是一个对象,由键值对构成,是json的扩展Bson形式

MongoDB的使用

安装MongoDB

Windows安装MongoDB
Linux安装MongoDB
Mac安装MongoDB
(这里以Windows为例)

  • 启动:net start MongoDB
  • 停止:net stop MongoDB
  • 使用终端连接mongo
  • 终端退出exitctrl+c

推荐安装MongoDB可视化工具robomongo

  • 查看当前数据库名称db
  • 查看当前数据库信息db.stats()
  • 列出所有数据库show dbs
  • 切换数据库use 数据库名
  • 删除当前数据库db.dropDatabase()
    默认数据库为test
  • 创建数据库集合db.createCollection([name], [options])
    [name]是要创建数据库集合的名字
    [options]是一个文档,用于指定集合的配置
    可选参数:
    capped:默认false,表示不设置集合上限大小,true表示设置上限
    size:当capped为true时,需要指定此参数来表示上限大小,超过此上限,会将之前的数据覆盖。单位为字节
db.createCollection('dome', {capped: true, size: 100})
  • 查看当前数据库的集合show collections
  • 删除某集合db.[集合名].drop()

数据类型

数据类型说明
Object ID文档ID
String字符串,必须是有效的UTF-8
Boolean布尔类型,true或false
Integer整数
Double浮点数
Arrays数组或列表,多个值存储到一个键
Object用于嵌入的文档,一个值为一个文档
Null存储Null值
Timestamp时间戳
Date存储当前日期或时间的UNIX时间格式

object ID 保证文档的唯一性,若没有设置,默认提供一个12字节的十六进制数(4位时间戳+3位机器ID+2位进程id+3位增量值)

常用语法

  • 增:db.[集合名称].insert(document)
db.dome.insert({_di: '20191219', name: 'hh', gender:1})
  • db.[集合名称].remove(<query>, {justOne: <boolean>})
    参数query:可选,删除的文档的条件
    参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除多条
db.stu.remove({gender:0}, {justOne:true})
  • db.[集合名称].save(document)
db.stu.save({_id:'20191219', 'name':'nihao'})

  • find():查询db.[集合名称].find({条件文档})
    findOne():查询,只返回一个db.集合名称.findOne({条件文档})
    pretty:将结果格式化db.集合名称.find({条件文档}).pretty()

  • 更新:db.[集合名称].update(<query>, <update>, {multi: <boolean>})
    参数query:查询条件,相当于sql语句中的where
    参数update:更新操作符,相当于sql语句中的set
    参数multi:默认是false,表示只更新找到的第一条数据,为true表示把满足条件的文档全部更新

sb.stu.update({'name':'haha'}, {$set: {name:'haha'}})
  • 运算符
    等于,默认是等于判断,没有运算符
    小于$lt
    小于或等于$lte
    大于$gt
    大于或等于$gte
    不等于$ne
    逻辑与:默认是逻辑与的关系
    逻辑或:使用$or
    $nin判断是否在某个范围内
    使用//$regex编写正则表达式
    使用$where后面写一个函数,返回满足条件的数据

  • limit()读取指定数量的文档db.[集合名称].find().limit(NUMBER)

db.stu.find().limit(2)
  • skip()跳过指定数量的文档db.[集合名称].find().skip(NUMBER)
db.stu.find().skip(2)
  • 投影db.[字段名称].find({}, {字段名称:1, ...})
    在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段;对于需要显示的字段,设置为1即可,不设置即为不显示
db.stu.find({},{name:1,gender:1})
  • 排序db.[集合名称].find().sort({字段:1, ...})
    参数1为升序,-1为降序
db.stu.find().sort({gender:-1,age:1})
  • 统计个数db.[集合名称].find({条件}).count()db.[集合名称].count({条件})
db.stu.find({gender:1}).count()
db.stu.count({gender:1})
  • 消除重复db.[集合名称].distinct('去重字段', {条件})
db.stu.distinct('gender', {age:{$gt:18}})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值