数据库——MongoDB安装和简单使用

MongoDB

文档

{
    "foo": 3,
    "greeting" : "Hello World!"
}
  • 区分大小写
  • key值唯一,不可重复
  • 文档可嵌套
  • 键值对是有序的

集合

集合就是一组文档。

文档类似关系型数据库的行

集合类似关系型数据库的表

集合中的文档无需固定的结构

命名规则

  1. 不能是空字符串
  2. 不能包含\0字符
  3. 不能使用system.的前缀
  4. 建议不包含保留字 “$”
  5. 用.分割不同命名空间的子集合

数据库

  1. 多个文档组成的集合,多个集合组成数据库
  2. 一个实例可以承载多个数据库
  3. 每个数据库都有独立的权限
  4. 保留的数据库的名称(admin, local ,config)

安装

两个下载地址,下载的版本为4.2.2

https://www.mongodb.com/download-center/community
https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.2/multiverse/binary-amd64/mongodb-org-server_4.2.2_amd64.deb

对于下载下来的deb文件,可以直接点击安装,也可以使用命令安装

sudo dpkg -i mongodb-org-server_4.2.2_amd64.deb

如果出现依赖问题,可以执行

sudo apt -f install

去解决依赖问题,然后重新安装就可以

启动

对于ubuntu使用命令

sudo service mongod start

然后可以查看状态

$ sudo netstat -laput | grep mongod
tcp        0      0 localhost:27017         0.0.0.0:*               LISTEN      28110/mongod  

安装mongodb-clients

 sudo apt install mongodb-clients

然后就可以使用mongo命令使用Mongodb Shell与数据库进行交互了。

使用命令行操作数据库

CRUD

新增数据(Create)

显示数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

使用数据库,使用use命令,如果数据库不存在,就会创建这个数据库

> use students;
switched to db students

设置一个文档

> stu = {name : 'John', age: 21}
{ "name" : "John", "age" : 21 }

插入到数据库中

> db.students.insert(stu)
WriteResult({ "nInserted" : 1 })

说明已经成功的插入数据了。

查询数据(Read)

> db.students.find()
{ "_id" : ObjectId("5e09ae6f8ac520f21c51707f"), "name" : "John", "age" : 21 }
{ "_id" : ObjectId("5e09aed48ac520f21c517080"), "name" : "Tom" }

查询一条数据

> db.students.findOne()
{
	"_id" : ObjectId("5e09ae6f8ac520f21c51707f"),
	"name" : "John",
	"age" : 21
}

可以得到一条格式完整的数据

修改数据(Update)

从数据中先查询出来,然后修改之后,再更新。因为直接更新会覆盖原来的数据,不能单独更新字段。

> s = db.students.findOne()
{
	"_id" : ObjectId("5e09ae6f8ac520f21c51707f"),
	"name" : "John",
	"age" : 21
}
> db.students.update({name:'John'},{name : 'JohnC'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> s = db.students.findOne()
{ "_id" : ObjectId("5e09ae6f8ac520f21c51707f"), "name" : "JohnC" }

但是这种每次都只能更改一条数据,对于需要用于条件更新的数据,我们可以使用其他的方式去更新数据

删除数据(Delete)

> db.students.remove({name: 'Amy'})
WriteResult({ "nRemoved" : 1 })

使用remove就可以根据条件删除数据了。

但是如果我们没有条件,就会清空整个数据库。

练习

任务

  • 创建一个学生信息表(至少包含:姓名,性别,成绩,年龄)
  • 写入至少15条不同的信息
  • 查询所有男生的数据(只需要学生的姓名和年龄)
  • 查询成绩集合的学生信息(学生成绩大于或等于60分)
  • 查询所有18岁的年龄和16岁的女生的数据
  • 按照学生的年龄进行排序
  • 将所有的女学生年龄增加一岁。

插入数据

> db.students.insertMany(
...     [
...         {name: 'bob', age: 16,sex: 'male',grade: 45},
...         {name: 'bob2', age: 18, sex: 'male',grade: 60},
...         {name: 'bob3', age: 20, sex: 'male',grade: 70},
...         {name: 'Tom', age: 16, sex: 'female',grade: 80},
...         {name: 'Tom2', age: 18, sex: 'female',grade: 55},
...         {name: 'Tom3', age: 17, sex: 'female',grade: 99},
...         {name: 'xi1', age: 15, sex: 'male',grade: 89},
...         {name: 'xi2', age: 16, sex: 'female',grade: 70},
...         {name: 'xi3', age: 17, sex: 'male',grade: 75},
...         {name: 'ahn', age: 16, sex: 'female',grade: 45},
...         {name: 'ahn1', age: 18, sex: 'male',grade: 66},
...         {name: 'ahn2', age: 19, sex: 'female',grade: 77},
...         {name: 'ahn3', age: 15, sex: 'male',grade: 88},
...         {name: 'john', age: 16, sex: 'female',grade: 90},
...         {name: 'john1', age: 17,sex: 'male',grade: 84},
...         {name: 'john2', age: 17, sex: 'female',grade: 80},
...         {name: 'john3', age: 18,sex: 'male',grade: 100}
...     ]
... )
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5e09ba2b8ac520f21c517083"),
		ObjectId("5e09ba2b8ac520f21c517084"),
		ObjectId("5e09ba2b8ac520f21c517085"),
		ObjectId("5e09ba2b8ac520f21c517086"),
		ObjectId("5e09ba2b8ac520f21c517087"),
		ObjectId("5e09ba2b8ac520f21c517088"),
		ObjectId("5e09ba2b8ac520f21c517089"),
		ObjectId("5e09ba2b8ac520f21c51708a"),
		ObjectId("5e09ba2b8ac520f21c51708b"),
		ObjectId("5e09ba2b8ac520f21c51708c"),
		ObjectId("5e09ba2b8ac520f21c51708d"),
		ObjectId("5e09ba2b8ac520f21c51708e"),
		ObjectId("5e09ba2b8ac520f21c51708f"),
		ObjectId("5e09ba2b8ac520f21c517090"),
		ObjectId("5e09ba2b8ac520f21c517091"),
		ObjectId("5e09ba2b8ac520f21c517092"),
		ObjectId("5e09ba2b8ac520f21c517093")
	]
}
> db.students.find()
{ "_id" : ObjectId("5e09ba2b8ac520f21c517083"), "name" : "bob", "age" : 16, "sex" : "male", "grade" : 45 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517084"), "name" : "bob2", "age" : 18, "sex" : "male", "grade" : 60 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517085"), "name" : "bob3", "age" : 20, "sex" : "male", "grade" : 70 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517086"), "name" : "Tom", "age" : 16, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517087"), "name" : "Tom2", "age" : 18, "sex" : "female", "grade" : 55 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517088"), "name" : "Tom3", "age" : 17, "sex" : "female", "grade" : 99 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517089"), "name" : "xi1", "age" : 15, "sex" : "male", "grade" : 89 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708a"), "name" : "xi2", "age" : 16, "sex" : "female", "grade" : 70 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708b"), "name" : "xi3", "age" : 17, "sex" : "male", "grade" : 75 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708c"), "name" : "ahn", "age" : 16, "sex" : "female", "grade" : 45 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708d"), "name" : "ahn1", "age" : 18, "sex" : "male", "grade" : 66 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708e"), "name" : "ahn2", "age" : 19, "sex" : "female", "grade" : 77 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708f"), "name" : "ahn3", "age" : 15, "sex" : "male", "grade" : 88 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517090"), "name" : "john", "age" : 16, "sex" : "female", "grade" : 90 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517091"), "name" : "john1", "age" : 17, "sex" : "male", "grade" : 84 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517092"), "name" : "john2", "age" : 17, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517093"), "name" : "john3", "age" : 18, "sex" : "male", "grade" : 100 }

查询所有的男生的数据

> db.students.find({sex:'male'})
{ "_id" : ObjectId("5e09ba2b8ac520f21c517083"), "name" : "bob", "age" : 16, "sex" : "male", "grade" : 45 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517084"), "name" : "bob2", "age" : 18, "sex" : "male", "grade" : 60 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517085"), "name" : "bob3", "age" : 20, "sex" : "male", "grade" : 70 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517089"), "name" : "xi1", "age" : 15, "sex" : "male", "grade" : 89 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708b"), "name" : "xi3", "age" : 17, "sex" : "male", "grade" : 75 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708d"), "name" : "ahn1", "age" : 18, "sex" : "male", "grade" : 66 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c51708f"), "name" : "ahn3", "age" : 15, "sex" : "male", "grade" : 88 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517091"), "name" : "john1", "age" : 17, "sex" : "male", "grade" : 84 }
{ "_id" : ObjectId("5e09ba2b8ac520f21c517093"), "name" : "john3", "age" : 18, "sex" : "male", "grade" : 100 }

将不需要的字段去掉

> db.students.find({sex:'male'},{name:1 , age: true})
{ "_id" : ObjectId("5e09bb927701891d3a867024"), "name" : "bob", "age" : 16 }
{ "_id" : ObjectId("5e09bb927701891d3a867025"), "name" : "bob2", "age" : 18 }
{ "_id" : ObjectId("5e09bb927701891d3a867026"), "name" : "bob3", "age" : 20 }
{ "_id" : ObjectId("5e09bb927701891d3a86702a"), "name" : "xi1", "age" : 15 }
{ "_id" : ObjectId("5e09bb927701891d3a86702c"), "name" : "xi3", "age" : 17 }
{ "_id" : ObjectId("5e09bb927701891d3a86702e"), "name" : "ahn1", "age" : 18 }
{ "_id" : ObjectId("5e09bb927701891d3a867030"), "name" : "ahn3", "age" : 15 }
{ "_id" : ObjectId("5e09bb927701891d3a867032"), "name" : "john1", "age" : 17 }
{ "_id" : ObjectId("5e09bb927701891d3a867034"), "name" : "john3", "age" : 18 }

在查询条件后面加上显示的条件,用1或者true来表示是否显示字段。

> db.students.find({sex:'male'},{name:1 , age: true,_id:0})
{ "name" : "bob", "age" : 16 }
{ "name" : "bob2", "age" : 18 }
{ "name" : "bob3", "age" : 20 }
{ "name" : "xi1", "age" : 15 }
{ "name" : "xi3", "age" : 17 }
{ "name" : "ahn1", "age" : 18 }
{ "name" : "ahn3", "age" : 15 }
{ "name" : "john1", "age" : 17 }
{ "name" : "john3", "age" : 18 }

也可以隐藏id

查询及格的学生

> db.students.find({grade:{'$gte':60}})
{ "_id" : ObjectId("5e09bb927701891d3a867025"), "name" : "bob2", "age" : 18, "sex" : "male", "grade" : 60 }
{ "_id" : ObjectId("5e09bb927701891d3a867026"), "name" : "bob3", "age" : 20, "sex" : "male", "grade" : 70 }
{ "_id" : ObjectId("5e09bb927701891d3a867027"), "name" : "Tom", "age" : 16, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09bb927701891d3a867029"), "name" : "Tom3", "age" : 17, "sex" : "female", "grade" : 99 }
{ "_id" : ObjectId("5e09bb927701891d3a86702a"), "name" : "xi1", "age" : 15, "sex" : "male", "grade" : 89 }
{ "_id" : ObjectId("5e09bb927701891d3a86702b"), "name" : "xi2", "age" : 16, "sex" : "female", "grade" : 70 }
{ "_id" : ObjectId("5e09bb927701891d3a86702c"), "name" : "xi3", "age" : 17, "sex" : "male", "grade" : 75 }
{ "_id" : ObjectId("5e09bb927701891d3a86702e"), "name" : "ahn1", "age" : 18, "sex" : "male", "grade" : 66 }
{ "_id" : ObjectId("5e09bb927701891d3a86702f"), "name" : "ahn2", "age" : 19, "sex" : "female", "grade" : 77 }
{ "_id" : ObjectId("5e09bb927701891d3a867030"), "name" : "ahn3", "age" : 15, "sex" : "male", "grade" : 88 }
{ "_id" : ObjectId("5e09bb927701891d3a867031"), "name" : "john", "age" : 16, "sex" : "female", "grade" : 90 }
{ "_id" : ObjectId("5e09bb927701891d3a867032"), "name" : "john1", "age" : 17, "sex" : "male", "grade" : 84 }
{ "_id" : ObjectId("5e09bb927701891d3a867033"), "name" : "john2", "age" : 17, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09bb927701891d3a867034"), "name" : "john3", "age" : 18, "sex" : "male", "grade" : 100 }

'$gte’表示大于等于

查询所有18岁男生和16岁女生的数据

> db.students.find({'$or':[{sex:'male', age:18},{sex:'female', age:16}]})
{ "_id" : ObjectId("5e09bb927701891d3a867025"), "name" : "bob2", "age" : 18, "sex" : "male", "grade" : 60 }
{ "_id" : ObjectId("5e09bb927701891d3a867027"), "name" : "Tom", "age" : 16, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09bb927701891d3a86702b"), "name" : "xi2", "age" : 16, "sex" : "female", "grade" : 70 }
{ "_id" : ObjectId("5e09bb927701891d3a86702d"), "name" : "ahn", "age" : 16, "sex" : "female", "grade" : 45 }
{ "_id" : ObjectId("5e09bb927701891d3a86702e"), "name" : "ahn1", "age" : 18, "sex" : "male", "grade" : 66 }
{ "_id" : ObjectId("5e09bb927701891d3a867031"), "name" : "john", "age" : 16, "sex" : "female", "grade" : 90 }
{ "_id" : ObjectId("5e09bb927701891d3a867034"), "name" : "john3", "age" : 18, "sex" : "male", "grade" : 100 }

按照学生的年龄进行排序

> db.students.find().sort({age:1})
{ "_id" : ObjectId("5e09bb927701891d3a86702a"), "name" : "xi1", "age" : 15, "sex" : "male", "grade" : 89 }
{ "_id" : ObjectId("5e09bb927701891d3a867030"), "name" : "ahn3", "age" : 15, "sex" : "male", "grade" : 88 }
{ "_id" : ObjectId("5e09bb927701891d3a867024"), "name" : "bob", "age" : 16, "sex" : "male", "grade" : 45 }
{ "_id" : ObjectId("5e09bb927701891d3a867027"), "name" : "Tom", "age" : 16, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09bb927701891d3a86702b"), "name" : "xi2", "age" : 16, "sex" : "female", "grade" : 70 }
{ "_id" : ObjectId("5e09bb927701891d3a86702d"), "name" : "ahn", "age" : 16, "sex" : "female", "grade" : 45 }
{ "_id" : ObjectId("5e09bb927701891d3a867031"), "name" : "john", "age" : 16, "sex" : "female", "grade" : 90 }
{ "_id" : ObjectId("5e09bb927701891d3a867029"), "name" : "Tom3", "age" : 17, "sex" : "female", "grade" : 99 }
{ "_id" : ObjectId("5e09bb927701891d3a86702c"), "name" : "xi3", "age" : 17, "sex" : "male", "grade" : 75 }
{ "_id" : ObjectId("5e09bb927701891d3a867032"), "name" : "john1", "age" : 17, "sex" : "male", "grade" : 84 }
{ "_id" : ObjectId("5e09bb927701891d3a867033"), "name" : "john2", "age" : 17, "sex" : "female", "grade" : 80 }
{ "_id" : ObjectId("5e09bb927701891d3a867025"), "name" : "bob2", "age" : 18, "sex" : "male", "grade" : 60 }
{ "_id" : ObjectId("5e09bb927701891d3a867028"), "name" : "Tom2", "age" : 18, "sex" : "female", "grade" : 55 }
{ "_id" : ObjectId("5e09bb927701891d3a86702e"), "name" : "ahn1", "age" : 18, "sex" : "male", "grade" : 66 }
{ "_id" : ObjectId("5e09bb927701891d3a867034"), "name" : "john3", "age" : 18, "sex" : "male", "grade" : 100 }
{ "_id" : ObjectId("5e09bb927701891d3a86702f"), "name" : "ahn2", "age" : 19, "sex" : "female", "grade" : 77 }
{ "_id" : ObjectId("5e09bb927701891d3a867026"), "name" : "bob3", "age" : 20, "sex" : "male", "grade" : 70 }

如果age为-1表示为逆序。

将所有的女学生年龄增加1岁

> db.students.update({sex:'female'},{'$inc':{age:1}}, {multi:true})
WriteResult({ "nMatched" : 8, "nUpserted" : 0, "nModified" : 8 })

使用$inc来增加值,使用multi来改变多条数据。

图形界面

对于图形管理工具,我使用的是DataGrip或者是Robomongo,DataGrip可以连接多种数据库还是很方便的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值