MongoDB
什么是MongoDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应
用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当
中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的
bson格式,因此可以存储比较复杂的数据类型。
和数据库比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j61PNLdn-1601027841840)(./images/2020-9-25.png)]
ObjectId 是mongo自己生成的id
MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:
- 前四位是时间戳
- 接下来的 3 个字节是机器标识码
- 紧接的两个字节由进程 id 组成 PID
- 最后三个字节是随机数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2q9NQxze-1601027841845)(./images/20200925-1.jpg)]
优化性能
1. 文档中的_id键推荐使用默认值,禁止向_id中保存自定义的值。
解读: MongoDB文档中都会有一个“_id”键,默认是个ObjectID对象(标识符中包含时间戳、机器ID、进程ID和计数器)。MongoDB在指定_id与不指定_id插入时 速度相差很大,指定_id会减慢插入的速率。
2. 推荐使用短字段名
解读:与关系型数据库不同,MongoDB集合中的每一个文档都需要存储字段名,长字段名会需要更多的存储空间。
安装
1. win系统中安装
1. 直接解压安装文件,傻瓜式安装
- 会安装在:C:\Program Files\MongoDB
2. 启动服务端
- 地址:C:\Program Files\MongoDB\Server\3.2\bin mongod.exe
- 创建一个文件夹d:\data ,用于存放数据的目录data 执行命令
mongod --dbpath=F:\data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiC5KKFg-1601027841847)(./images/20200925-2.jpg)]
2.1 修改端口
- mongoDB的默认端口是27017,如果想修改端口
mongod --dbpath=F:\data -port 8989
3. 启动客户端
- 地址:C:\Program Files\MongoDB\Server\3.2\bin mongo.exe
mongo 127.0.0.1:27017
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzdd9rD1-1601027841851)(./images/20200925-3.jpg)]
2. docker中安装
1. 查看docker中是否存在
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C2cDkkvP-1601027841853)(./images/20200925-4.jpg)]
2. 创建容器
docker run -id --name mongo -p 27017:27017 mongo
3. 在win中判断是不是安装成功
- 在mongo安装的地方
mongo 192.168.200.128
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-803BiHp8-1601027841855)(./images/20200925-5.jpg)]
常用命令
1.创建db或者选择db
- commentdb 数据库名字
use commentdb
2. 查看数据库
show dbs
3. 进入集合(前提必须进入数据库)
use comment
4. 插入数据
- 必须进入了相应的数据
- db.集合名字.insert({content:“十次方课程”,userid:“1011”})
- 如果集合名字不存在,则新建立一个集合
db.comment.insert({content:"十次方课程",userid:"1011"})
查询数据
1. 查询所有
db.comment.find()
1. 查询一条数据
db.comment.findOne({"_id" : "1"})
2. 指定返回多少条数据
db.comment.find().limit(2)
修改与删除文档
1. 修改文档
- 但是会出现,原来的内容都会消失
db.集合名称.update(条件,修改后的数据);
- 必须加加上 ObjectId()
db.comment.update({"_id" : ObjectId("5f6d92e5316b6ceb267413bd")},{"name":"张三"})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eP4pcEvf-1601027841857)(./images/20200925-6.jpg)]
1.2 为了解决这个问题,我们需要使用修改器$set来实现
- 如果没字段会添加这个字段
db.comment.update({"_id" : ObjectId("5f6d92e5316b6ceb267413bd")},{$set:{"thumbup":"2000"}})
2. 删除文档
db.comment.remove({"_id" : ObjectId("5f6d92e5316b6ceb267413bd")})
2.1 删除文档这个十分危险(删除全部)
db.comment.remove({})
统计数据
1 统计数据
db.comment.count()
1.2 条件数据统计
db.comment.count({"userid" : "1013"})
模糊数据
MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:
/模糊查询字符串/
查询评论内容包含“10”的所有文档,代码如下:
- 不需要""
db.comment.find({"userid":/10/})
查询评论内容头包含“10”的所有文档,代码如下:
- 不需要""
db.comment.find({"userid":/^10/})
查询评论内容后面包含“10”的所有文档,代码如下:
- 不需要""
db.comment.find({"userid":/10^/})
大于 小于 不等于
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value
包含与不包含
1 包含使用$in操作符
- 查询评论集合中userid字段包含1013和1014的文档:
db.comment.find({"userid":{$in:["1013","1014"]}})
2 不包含使用$nin操作符
- 查询评论集合中userid字段不包含1013和1014的文档:
db.comment.find({userid:{$nin:["1013","1014"]}})
条件连接
$and:[ {条件},{条件},{条件} ]
- 查询评论集合中thumbup大于等于1000 并且小于2000的文档:
db.comment.find({$and:[ {thumbup:{$gte:1000}} ,{thumbup:{$lt:2000} }]})
- 如果两个以上条件之间是或者的关系,我们使用操作符进行关联,与前面and的使用方式相同,格式为:
$or:[ {条件},{条件},{条件} ]
- 查询评论集合中userid为1013,或者点赞数小于2000的文档记录:
db.comment.find({$or:[ {userid:"1013"} ,{thumbup:{$lt:2000} }]})
列值增长
- 对某列值在原有值的基础上进行增加或减少,可以使用$inc运算符:
db.comment.update({_id:"2"},{$inc:{thumbup:1}})
可视化工具robomongo
Mongodb有很多可视化工具,这里我们使用robomongo,可以访问官网:https://r
obomongo.org/
某列值在原有值的基础上进行增加或减少,可以使用$inc运算符:
db.comment.update({_id:"2"},{$inc:{thumbup:1}})
可视化工具robomongo
Mongodb有很多可视化工具,这里我们使用robomongo,可以访问官网:https://r
obomongo.org/