栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MongoDB

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MongoDB

MongoDB简介 1.是什么

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,只在WEB应用提供可扩展的高性能数据存储解决方案

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • 基于分布式文件存储数据库
  • C++语言编写
  • 支持的数据结构非常松散,是类似json的bson格式(后期插入修改数据写json)

Json(JavaScript Object Notation,Js对象简谱)是一种轻量级的数据交换格式bson(二进制Json)

2.能干什么
  • 存放项目数据
  • 实战工作写API接口(重要)
MongoDB基本操作 1.查看数据库

语法:show databases

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UubizZKD-1653707936496)(C:Users孙凯DesktopJava笔记MongoDBphoto查看数据库.png)]

2.选择数据库

语法:user 数据库名

注意:(隐式创建)在mongodb选择不存在的数据库不会报错,后期当该数据库有数据时,系统会自动创建

3.查看集合

语法:show collections

4.创建集合

语法:db.createCollecion(“集合名”)

5.删除集合

语法:db.集合名.drop()

6.删除数据库
  1. 通过use语法选中数据库
  2. 通过db.dropDatabase()删除数据库
小总结

数据库(查看,创建,选择,删除)

查看:show databases
创建:有单独的语法,但是忽略 隐式创建
选择:use 数据库名
删除:1通过use选中数据库,2通过db.dropDatabases()删除数据库

集合(查看,创建,删除)

查看:show collection
创建:db.createCollection('集合名')  多学一招:忽略 后期插入数据 隐式创建集合
删除:db.集合名.drop()
MongoDB文档增删改查(CURD) 1.插入数据

语法:db.集合名.insert(JSON数据)

说明:集合存在-则直接插入数据 集合不存在-隐式创建

联系:在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

use test2
db.c1.insert({uname:"webopenfather",age:18})

注意:
1.数据库和集合不存在都隐式创建
2.对象的键同意不加引号方便看,但是查看集合数据时系统会自动加
3.mongodb会给每条数据增加一个全球唯一的_id键

_id组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7SW1M3gi-1653707936497)(C:Users孙凯DesktopJava笔记MongoDBphoto_id.png)]

思考1:是否可以自定义_id值?

可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐)
db.c1.insert({_id:1,uname:"webopenfather",age:18})

思考2:如何插入多条记录?

传递数据,数组中写一个个JSON数据即可
db.c1.insert([
{uname:"z3",age:3},
{uname:"z4",age:4},
{uname:"w5",age:5},
])
含义:一次性插入3条数据到c1集合

思考3:如何快速插入10条数据

mongodb底层使用js引擎实现的,所以支持部分js语法
因此:可以写for循环
for(var i-1;i<-10;i++){
print(i)
}

需求:在test2数据库c2集合中插入10条数据,分别为a1 ,a2 ...a10

for(var i=1;i<=10;i++){
db.c2.insert({uname:"a"+i,age:i })
}
2.查询数据

db.集合名.find().pretty() 格式化展示数据

基础语法:db.集合名.find({条件}[,查询的列])

条件
	查询所有数据   {}或者不写
	查询age=6的数据    {age:6}
	既要age=6又要性别=男   {age:6,sex:'男'}

查询的列(可选参数)
	不写 -则查询全部字段
	{age:1} 只显示age字段
	{age:0} 除了age字段都显示
	注意:不管你怎么写系统自定义的_id都会在

升级语法

db.集合名.find({键:值})   注:值不直接写
			{运算符:值}
db.集合名.find({
	键:{运算符:值}
})
运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin
$ninnot in

练习1:查询所有数据?

db.c1.find()

练习2:查询年龄大于5岁的数据?

db.c1.find({age:{$gt:5})

练习3:查询年龄是5岁、8岁、10岁的数据?

db.c1.find({a:{$in:[5,8,10]}})

练习4:只看年龄列,或者年龄以外的列(_id别管它)?

db.c2.find({}{age:1})
db.c2.find({}{age:0})
3.修改数据

基础语法:db.集合名.update(条件,新数据[是否新增,是否修改多条])

是否新增:指条件匹配不到数据则插入,true是插入,false否不插入默认
是否修改多条:指将匹配成功的数据都修改(true是,false否默认)

升级语法

db.集合名.update(条件,新数据)
			{修改器:{键:值}}
运算符作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列

准备工作

use test2;
for(var i=1;i<-10;i++){
	db.c3.insert({}"uname":"zs"+i,"age":i});
}

练习1:将{uname:“zs1”}改为{uname:“zs2”}

db.c3.update({uname:"zs1"},{uname:"zs2"})

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAOb2GKY-1653707936498)(C:Users孙凯DesktopJava笔记MongoDBphotoupdate.png)]

发现:默认不是修改,而是替换

解决:使用升级语法 修改器

需求:使用 修改器 将zs4的姓名改为zs44

语法:db.c3.update({uname:“zs2”},{$set:{uname:“zs22”}})

练习2:给{uname:“zs10”}的年龄加2岁或者减2岁

db.c3.update({uname:"zs10"},{$inc:{age:2}})


减两岁
db.c3.update({uname:"zs10"},{$inc:{age:-2}})

练习3:修改器综合练习

插入数据:db.c4.insert({uname:“神龙教主”,age:888,who:“男”,other:“非国人”})

完成需求

uname 改成 webopenfather (修改器:$set)

age增加 111 (修改器:$inc)

who 改字段 sex (修改器:$rename)

other 删除 (修改器:$unset)

语法分析

db.c4.update({uname:"神龙教主"},{uname:"webopenfather"}) #错误  , 替换
								{$set:{uname:"webopenfather"}}
								{$inc:{age:111}}
								{$rename:{who:"sex"}}
								{$unset:{other:true}}
留心如何一次性写多个修改器
db.c4.update({uname:"神龙教主"},{
$set:{uname:"webopenfather"},
$inc:{age:111},
$rename:{who:"sex"},
$unset:{other:true}

})

练习4:验证语法最后两个参数

【验证】是否新增true是 false否:修改uname等于zs30的年龄30岁

找不到就插入
db.c3.update({uname:"zs30"},{$set:{age:30}},true)

【验证】是否修改多条true是,false否默认

 
4.删除数据 

语法:db.集合名.remove(条件[,是否删除一条])

注意:是否删除一条true是,false否

小总结

高级开发工程师统称,所有数据库都需要有增删改查CURD标识

MongoDB删除语法:remove

增Create

db.集合名.insert(JSON数据)

删Delete

db.集合名.remove(条件,【,是否删除一条true是false否默认】)

改Update

db.集合名.update(条件,新数据[,是否新增,是否修改多条])
升级语法db.集合名.update(条件,{修改器:{键:值}})

查Read

db.集合名.find(条件【,查询的列】)
MongoDB排序&分页

准备数据:

use test3
db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"b",sex:2,age:2})
db.c1.insert({_id:3,name:"c",sex:3,age:3})
db.c1.insert({_id:4,name:"d",sex:4,age:4})
db.c1.insert({_id:5,name:"e",sex:5,age:5})
db.c1.find()
排序

语法:db.集合名.find().sort(JSON)

说明:键-就是要排序的列/字段 。值:1升序 -1降序

练习:年龄升序&降序

db.c1.find().sort({age:-1}) 降序
db.c1.find().sort({age:1}) 升序
Limit与Skip方法

语法:db.集合名.find().sort().skip(数字).limit(数字)

说明:skip跳过指定数量(可选),limit限制查询的数量

练习:1、降序查询两条,2、降序跳过2条并查询2条

1、db.c1.find().sort({age:-1}).skip(0).limit(2)
2、db.c1.find().sort({age:-1}).skip(2).limit(2)
小总结

db.集合名.find()

.sort({列:1/-1}) 排序

.skip(数字) 跳过指定数量

.limit(数字) 限制查询条数

.count() 统计总数量

不够:百度

MongoDB聚合查询

语法

db.集合名称.aggregate([
	{管道:{表达式}}

])

常用管道

$group将集合中的文档分组,用于统计结果
$match过滤数据,只要输出符合条件的文档
$sort聚合数据进一步排序
$skip跳过指定文档数
$limit限制集合数据返回文档数

常用表达式

$sum 总和  $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值

准备数据

use test4
db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"a",sex:1,age:2})
db.c1.insert({_id:3,name:"b",sex:2,age:3})
db.c1.insert({_id:4,name:"c",sex:2,age:4})
db.c1.insert({_id:5,name:"d",sex:2,age:5})
db.c1.find()

练习

  • 统计男生、女生的总年龄

    db.c1.aggregate([
        {
            $group: {
                _id: "$sex",
                rs: {$sum:"$age"}
            }
        }
    ])
    
  • 统计男生、女生的总人数

    db.c1.aggregate([
        {
            $group: {
                _id: "$sex",
                rs: {
                    $sum: 1
                }
            }
        }
    ])
    
  • 求学生总数和平均年龄

db.c1.aggregate([
    {
        $group: {
            _id: null,
            total_num: {
                $sum: 1
            },
            total_avg: {
                $avg: "$age"
            }
        }
    }
])
  • 查询男神,女生人数,按人数升序
db.c1.aggregate([
    {
        $group: {
            _id: "$sex",
            rs: {
                $sum: 1
            }
        }
    },
    {
        $sort: {
            rs: 1
        }
    }
])
        }
      }
  }

])

- 求学生总数和平均年龄

db.c1.aggregate([
{
$group: {
_id: null,
total_num: {
$sum: 1
},
total_avg: {
a v g : " avg: " avg:"age"
}
}
}
])

- 查询男神,女生人数,按人数升序

db.c1.aggregate([
{
KaTeX parse error: Expected '}', got 'EOF' at end of input: … _id: "sex",
rs: {
$sum: 1
}
}
},
{
$sort: {
rs: 1
}
}
])

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937766.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号