一、MongoDB数据库的定义:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- 在高负载的情况下,添加更多的节点,可以保证服务器性能。
- MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
- MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
- MongoDB三元素: 数据库、集合、文档:
1). 文档,就是一个对象,由键值对构成,是json的扩展Bson形式 ,如:{'name':'guojing','gender':'男’}
2). 集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shu
3). 一个mongodb中可以建立多个数据库
4). 数据库:是一个集合的物理容器,一个数据库中可以包含多个集合
注意:MongoDB区分类型和大小写; MongoDB的文档不能有重复的键;
二、MongoDB数据库的优缺点:
优点:
- 文档结构的存储方式,能够更便捷的获取数据,快速,就地更新
- 内置GridFS,支持大容量的存储,海量数据下,性能优越
- 动态查询,全索引支持,扩展到内部对象和内嵌数组
- 查询记录分析,复制(复制集)和支持自动故障恢复
- 高效存储二进制大对象 (比如照片和视频)
- 支持复杂聚合
- 自动分片支持云级扩展性,分片简单
缺点:
- 不支持事务操作,占用空间过大
- 没有如MySQL那样成熟的维护工具
- 无法进行关联表查询,不适用于关系多的数据
- 复杂聚合操作通过mapreduce创建,速度慢
- 在删除记录后不会在文件系统回收空间。除非删掉数据库。但是空间没有被浪费
三、MongoDB的下载与安装:
官方文档安装地址:
https://docs.mongodb.com/manual/installation/
Windowns 安装 :
https://www.cnblogs.com/ymwangel/p/5859453.html
四、MongoDB启动服务:
配置文件路径:
- 配置文件在/etc/mongod.conf
- 默认端口27017
启动与退出: - 服务端开启:sudo service mongod start
- 停止服务:sudo service mongod stop
- 重启服务:sudo service mongod restart
- 客户端开启:mongo
- 退出连接:exit 或 ctrl+c
五、MongoDB 数据库的基本操作:
-
创建数据库:
use DATABASE_NAME -
查看数据库
查看当前数据库:db
查看所有数据库:show dbs
MongoDB 中默认的数据库为 test,刚创建的数据库并不在数据库的列表中,要显示它,需要向创建的数据库中插入一些数据。**
-
删除数据库:
db.dropDatabase()
删除数据库时需要切换到要删除的数据库,使用上面的命令才可以删除。
六、MongoDB 文档的基本操作:
1. MongoDB 使用 insert() 或 save() 方法向集合中插入文档:
db.COLLECTION_NAME.insert(document)
db.collection.insertOne():向指定集合中插入一条文档数据。
db.collection.insertMany():向指定集合中插入多条文档数据。
例子:
db.stu.insert({name: 'zhangsan',age:18})
- 如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
- 也可以使用 db.col.save(document) 命令插入文档。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
2. MongoDB 删除文档:
MongoDB remove()函数是用来移除集合中的数据,但现在大多使用deleteOne() 和 deleteMany() 方法。
例子:
db.col.deleteOne({ name: 'zhangsan',age:18 })
例子:
db.col.deleteMany({ name: 'zhangsan',age:18 })
3. MongoDB 查询文档:
MongoDB 查询文档使用 find() 方法。
find() 方法以非结构化的方式来显示所有文档。
-
pretty() 方法以格式化的方式来显示所有文档。
语法格式:db.col.find().pretty()
七、MongoDB 逻辑与条件运算:
1. MongoDB 条件运算:
条件操作符用于比较两个表达式并从MongoDB集合中获取数据。
MongoDB中条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
例子:
db.col.find({age : {$gte : 18}})
db.col.find({age : {$lte : 18}})
db.col.find({age : {$lt : 18}})
db.col.find({age : {$gt : 18}})
2. MongoDB 逻辑运算:
-
MongoDB AND 条件
db.col.find({key1:value1, key2:value2}).pretty()
-
MongoDB OR 条件
>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty
-
MongoDB AND与OR 条件
db.stu.find( { $or:[ {age:{$gte:18}}, {gender:1} ], name:'gj' } )
-
MongoDB In 条件
使用" in","nin" 判断是否在给出的判断条件内 :与or方法类似。db.stu.find( { age:{$in:[18,28]} } )
-
MongoDB Limit与Skip方法
limit() 方法 读取指定数量的数据记录
skip()方法来跳过指定数量的数据db.集合名称.find().limit(num) db.集合名称.find().skip(num)
limit() 方法、Skip() 方法 同时使用,不分先后顺序 表示跳过多少条,返回多少条
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)
-
MongoDB sort() 方法
对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。#升序 db.集合名称.find().sort({排序字段:1}) #降序 db.集合名称.find().sort({排序字段:-1}) #根据多个字段排序,先字段的先后顺序排序 db.集合名称.find().sort({age:-1,gender:1})
注意: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
-
MongoDB distinct() 方法
db.集合名称.distinct('去重字段',{条件})
-
MongoDB distinct() 方法
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段,参数为字段与值,值为1表示显示,值为0不显示db.集合名称.find({},{字段名称:0,...})
-
MongoDB count() 方法
表示返回集合中的文档数量,在count()函数中添加条件:db.集合名称.find({条件}).count()