MongoDB是非关系型的数据库,NoSQL数据库。
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。
1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
数据库对比
SQL术语 | MongoDB术语 | 对比 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表、集合 |
row | document | 数据记录行、文档 |
column | field | 数据字段、域 |
index | index | 索引 |
table joins | 无 | 表连接,MongoDB不支持 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
增删改查
非授权的方式启动数据库:
C:\Windows\system32>mongod --config c:\MongoDB\etc\mongo.conf
进入到mongo终端
C:\Windows\system32>mongo
查看数据库
创建一个数据库,不插入集合看不到数据库
1.增
创建集合(等价于创建一个表名为user的集合),,此时才可以看到数据库
另一种创建集合方式,且插入数据,集合中的字段是分类型的,插入的数字查找的时候也需要是数字,字符串同理
查看当前数据库集合
删除集合
删除数据库,删除的是当前数据库,如果想删除其他的数据库需要use到其他数据库删除
查看当前数据库指定集合下的所有数据,加pretty()格式化数据
查看当前数据库指定集合下的第一条数据
2.改
修改更新集合中用户名为miumiu的用户的年龄为100
修改更新集合中子文档,注意:子文档的key要叫引号包起来
修改用户名为miumiu的用户的班级名称为xxx
3.查
根据条件查询集合中的值,加pretty()格式化数据
根据子文档的条件查询集合中的值,注意加引号
查询年龄大于30的结果
$gt大于 $lt小于 $eq等于 $gte大于等于
4.删
删除集合中的数据
-----------------------------------分割线-----------------------------------
写数据
const Person = require('../dbs/models/person')
router.post('/addPerson',async function (ctx) {
const person = new Person({
name:ctx.request.body.name,
age:ctx.request.body.age
})
try{
await person.save()//person实例
}catch(e){
code = 1
}
ctx.body = {
code:code
}
})
module.exports = router
读数据
router.post('/getPerson',async function (ctx) {
const result = await Person.findOne({name:xtx.request.body.name})
const results = await Person.find({name:xtx.request.body.name})
//Person模型,模型具备读写能力 理解为静态方法
ctx.body = {
code:0,result,results
}
})
修改
router.post('/upsatePerson',async function (ctx) {
const result = await Person.where({
name:xtx.request.body.name
}).update({
age:ctx.request.body.age
})
ctx.body = {
code:0
}
})
删除
router.post('/removePerson',async function (ctx) {
const result = await Person.where({
name:xtx.request.body.name
}).remove()
ctx.body = {
code:0
}
})