Ubuntu20.04 安装 MongDB
# 安装
sudo apt install mongodb
# 查看状态
# status start stop enable disable
systemctl status mongodb
# 如果是apt方式安装 配置文件位置
vim /etc/mongodb.conf
MongDB 图像管理软件 Robo 3T
下载地址 https://robomongo.org/download
studiio 3T 收费版本 功能强大
robo 3T 免费版本 够用了
下载后, 进入软件目录 bin/robo3t
就可以启动了
Robo 3T连接MongoDB
首先确保mongodb已经启动,然后启动robo 3t
File -> Connect - create 创建连接, 然后点击save保存连接
双击连接,即可连接mongodb
创建数据
创建数据库
右击链接,选择 create database
来创建数据库,我们创建一个 study
创建集合
双击数据库 study
, 右击Collections,create collections
, 我们创建一个 students
然后我们插入一条数据
双击 Collections(1)
, 再双击 students
(1) 表示有1个集合,students就是我们刚刚创建的集合,双击完成后,如下如图
我们插入一条数据,把命令更改
db.getCollection('students').insertOne({"name":"张小二","age":"18","address":"北京"})
对比关系型数据库,非关系型数据库对数据结构没有那么强的一致性,但是我们尽量保证数据结构类型的一致性。
也就是说,我们可以执行如下命令,也可以成功执行
db.getCollection('students').insertOne({"hello":"world","sex":"男","address":"四川"})
且你可以插入两条一样的数据,因为系统会自动给你加上_id
自动,这个不同,导致数据不同,所以会出现两个看似一样的数据
批量插入数据
db.getCollection('students').insertMany([
{"name":"张三","age":"33","address":"上海"},
{"name":"李四","age":"24","address":"北京"},
{"name":"王二麻子","age":"19","address":"保密"}
])
查询
查询所有
db.getCollection('students').find({})
查询指定数据
db.getCollection('students').find({"name":"张小二","age":"18"})
范围查询
查询年龄大于等于23, 因为我插入的时候是字符串,所以这里也只能输入字符串23,介意的可以自行修改,我就懒得改了
db.getCollection('students').find({"age":{"$gte":"23"}})
db.getCollection('students').find({"age":{"$gte":"23"}})
$gt 大于
$gte 大于等于
$it 小于
$ite 小于等于
$ne 不等于
# 范围查询
db.getCollection('集合').find({"字段1":{操作符1:边界1,操作符2:边界2}})
# 范围查询,多个字段 关系是and 且
db.getCollection('集合').find({
"字段1":{操作符1:边界1,操作符2:边界2},
"字段2":{操作符1:边界1,操作符2:边界2}
}
)
限定返回的内容
# 1表示返回,0表示隐藏,默认1
db.getCollection('students').find({查询条件},{返回字段:1,返回字段:0})
修饰返回结果
# count() 返回条数
db.getCollection('students').find({}).count()
# limit() 限制返回条数
db.getCollection('students').find({}).limit(4)
# sort() -1倒序,1正序
db.getCollection('students').find({}).sort({字段1:-1})
修改数据
- updateOne 修改满足条件的第一条数据
- updateMany 修改所有符合条件的数据
db.getCollection('students').updateMany({"查询语句的第一个字典"},{‘$set’:{"字段1":"修改值","字段2":"修改值",}})
删除数据
删除delete 和 查询find的语法结构是一样的,就是把关键字换成delete,查询到什么,对应的就会删除什么。
一般的都是假删除,都是增加一个布尔值字段,表示数据是否删除,不会真正删除。
- deleteOne 删除满足条件的第一条数据
- deleteMany 删除所有符合条件的数据
去重
对于age,进行 age大于24的去重
db.getCollection('students').distinct(
'age',
{'age':{'$gte':"24"}}
)