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/