MongoDB全教程

MongoDB全教程

安装

第一步:
安装mongodb,地址:https://www.mongodb.com/try/download/community
在这里插入图片描述

第二步:这里我选择的是6.0版本,6.0版本另外需要安装一个mongoshell。(6.0以下版本无需安装mongoshell)
地址:https://www.mongodb.com/try/download/shell
在这里插入图片描述

第三步:将mongoshell解压到mongodb的bin目录下。

第四步:配置环境变量
将mongodb的bin路径复制到系统变量path中。

第五步:在mongodb目录中的data文件夹下创建db文件夹。

启动服务

手动启动服务
开启一个黑窗口输入如下指令
mongod --dbpath D:\ruanjian\mongodb\data\db
再开启一个黑窗口进入到mongoshell的bin目录下输入如下指令(6.0以下版本输入mongodb的bin路径下的mongo命令即可)
mongosh

设置开机自启动服务
在mongodb6.0版本中默认为我们开启了自启动,如<6.0则需手动配置。
1.找到mongodb的bin文件夹所在的位置,在bin所在的同目录下创建mongod.cfg,并编写如下:

systemLog:
destination:file
path:D:\ruanjian\mongodb\log\mongod.log
storage:
dbPath:D:\ruanjian\mongodb\data\db

2.以管理员身份打开cmd执行如下命令:
sc.exe create MongoDB binPath=""D:\ruanjian\mongodb\bin\mongod.exe" --service --config="D:\ruanjian\mongodb\bin\mongod.cfg"" DisplayName="MongoDB" start="auto"

3.打开服务找到mongodb并启动

基本概念

数据库(database)
集合(collection)
文档(document)
	-在Mongodb中,我们不需要手动去创建数据库和集合,当我们创建文档时,如果数据库或集合不存在则会自动创建数据库或集合。

基本指令

show dbs	显示所有的数据库
use 数据库名	切换数据库
db	查看当前数据库
show collections		显示当前数据库中所有的集合

MongoDB的增删改查操作

插入

在插入一个对象时,如果我们没有添加 _id 属性,则会自动生成一个_id,该id为文档的唯一标识。

单条插入
语法:db..insertOne(document)、db..insert(document)

方案一:
代码演示:

//进入到test数据库
use test;
//向test数据库中的users集合插入一个对象
db.users.insert({name:"陈宫",gender:"男",age:33})

方案二:
代码演示:

db.users.insertOne({name:"陈宫",gender:"男",age:33})

批量添加
语法:db..insert、db..insertMany

方案一:

db.users.insert([
{name:"张辽",gender:"男",age:28},
{name:"张郃",gender:"男",age:33},
{name:"徐晃",gender:"男",age:35},
{name:"乐进",gender:"男",age:32},
{name:"于禁",gender:"男",age:30}
])

方案二:

db.users.insertMany([
{name:"张辽",gender:"男",age:28},
{name:"张郃",gender:"男",age:33},
{name:"徐晃",gender:"男",age:35},
{name:"乐进",gender:"男",age:32},
{name:"于禁",gender:"男",age:30}
])

这两者的效果都是一样的。

删除

删除单条
语法:db..remove()、db..deleteOne()

方案一:

//该方法表示将name为张辽的所有文档查询出来并删除。
//默认会将查询出来的多个文档删除,但我们给参数2传入一个true就只会删除第一个。
db.users.remove({name:"张辽"},true)

//除此之外我们还可以传入其他条件。
//删除name为 ”张辽“、”张郃“ 的文档。
db.users.remove({name:{$in:["张辽","张郃"]}})

方案二:

db.users.deleteOne({name:"张辽"})

删除多条
语法:db..insert、db..deleteMany()

方案一:

//remove方法默认删除查询出来的所有文档
db.users.remove({name:"张辽"})

方案二:

db.users.deleteMany({name:"张辽"})

清空集合
将集合中所有的文档删除。
语法:db..drop()

代码演示:

db.users.drop()

删除数据库

db.dropDatabase()
修改

修改单个
语法:db..update()、db..updateOne()

注:当我们在修改某个不存在的属性时,会为我们自动创建该属性

方案一:

//update方法默认为修改第一个文档,但在将参数三multi属性设置为true则表示开启修改多个
db.users.update({_id:ObjectId("635e39d3ae37000058005092")}, {$set:{age:36}})

方案二:

db.users.updateOne({_id:ObjectId("635e39d3ae37000058005092")}, {$set:{age:30}})

修改多个
语法:db..update()、db..updateMany()

方案一:

//update方法默认为修改第一个文档,但在将参数三multi属性设置为true则表示开启修改多个
	db.users.update({name:"张辽"}, {$set:{age:36}},{multi:true})

方案二:

db.users.updateMany({name:"张辽"}, {$set:{age:36}})

替换文档
将一个对象替换为指定的对象。
语法:db..update({xxx},{xxx})、db..replaceOne()

代码演示:

//表示将name为张辽的文档对象替换为 参数二的中的文档对象
db.users.update({name:"张辽"}, {name:"许褚",age:36})
//表示将name为张辽的文档对象替换为 参数二的中的文档对象
db.users.replaceOne({name:"张辽"}, {name:"许褚",age:36})

删除属性
删除文档中的某个属性
语法:db..update({xxx},{$unset:{xxx}})

代码演示:

//表示将id为6360c38ee1670000aa00061a文档对象的age属性删除,$unset:{age:00}中age的属性值不管填什么都会将其删除,所以age值随意填写即可。
	db.users.updateOne({_id:ObjectId("6360c38ee1670000aa00061a")}, {$unset:{age:00}})

向数组中添加元素
用于向文档中数组属性添加元素
语法:db.users.update({xxx},{KaTeX parse error: Expected 'EOF', got '}' at position 11: push:{xxx}}̲)、db.users.upda…addToSet:{xxx}})

代码演示:

//向users集合中的hobby属性中的movies数组添加一个元素
db.users.update({name:"张郃"},{$push:{"hobby.movies":"火影忍者"}})

示例2:

//向users集合中的hobby属性中的movies数组添加一个元素,如果该元素在集合中已存在则不添加
db.users.update({name:"张郃"},{$addToSet:{"hobby.movies":"火影忍者"}})

自增/减

//将name为张辽的文档对象的age属性+30
	db.users.update({name:"张辽"}, {$inc:{age:30}})
//将name为张辽的文档对象的age属性-30
	db.users.update({name:"张辽"}, {$inc:{age:-30}})
查询

语法:db..find()

条件查询

  • $eq 等于
  • $ne 不等于
  • $gt 大于
  • $gte 大于等于
  • $lt 小于
  • $lte 小于等于
  • $in 包含
  • $nin 不包含

代码示例:

//当传入一个空对象时,表示查询所有。
db.users.find({})

//查询name为张辽、张郃的文档对象
db.users.find({name:{$in:["张辽","张郃"]}})
//查询age大于30的文档对象
db.users.find({age:{$gt:30}})

查询个数

db.users.find().count()

分页查询
语法:db..find().skip().limit()

代码示例:

//跳过3条记录,并输出10条
db.users.find().skip(3).limit(10)

模糊查询
在mongodb中模糊查询是用正则表达式来查的。
$regex: 正则,用于模糊查询。

使用$regex时,有以下几种用法:
{ : { $regex: /pattern/, $options: ‘’ } }
{ : { $regex: ‘pattern’, $options: ‘’ } }
{ : { $regex: /pattern/ } }

option参数的含义:

  • i 大小写不敏感
  • m 查询匹配中使用了锚,例如^(代表开头)和$(代表结尾),以及匹配\n后的字符串
  • x 忽视所有空白字符。 要求 r e g e x 与 regex与 regexoption合用
  • s 允许点字符(.)匹配所有的字符,包括换行符。 要求 r e g e x 与 regex与 regexoption合用

代码示例:

//查询name中包含侯的文档对象
db.users.find({name:{$regex:/^.*侯.*$/,$options:"si"}});
//查询name以 “辽” 结尾的文档对象
db.users.find({name:{$regex:/^.*辽$/}})

排序
语法:db..find().sort(xxx:1,xxx-1)

sort()以指定属性为规则来进行排序,sort()中需要传入一个或两个属性来指定排序规则,1表示升序,-1表示降序,当用参数1进行排序后如果相等则以参数2的排序规则进行排序。

代码示例:

db.users.find({}).sort({age:1,num:-1})

投影

用来指定需要显示哪些属性或不显示哪些属性,1表示显示该属性,0表示不显示该属性
语法:db..find({},{_id:0,name:1,age:1})

//返回name、age属性
db.users.find({},{_id:0,name:1,age:1})

文档之间的关系

一对一
//将曹操妻子的id存入到变量
var wid = db.husband.find({name:"曹操"}).wid()
//通过id查出曹操的妻子
db.wife.find({_id:ObjectId(wid)})

一对多

//将曹操的id查询出来赋值到变量中
var uid = db.users.findOne({name:"曹操"})._id;
//通过id查询到曹操所有的订单
db.order.find({uid:uid});

Springboot集成MongoDB

第一步:引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

第二步:配置数据库连接信息

# 登录用户所在的数据库
spring.data.mongodb.authentication-database=test

# 数据库的ip地址
spring.data.mongodb.host=localhost

# MongoDB端口号
spring.data.mongodb.port=27017

# 用户账号
#spring.data.mongodb.username=admin
#
# 用户密码
#spring.data.mongodb.password=123456

# 指定使用的数据库
# 不必预先创建,不存在该数据库会自动创建
spring.data.mongodb.database=test

第三步:创建对应的实体类,并在类上标注注解@Document()指定要操作的集合

@Data
@Document("users")
public class User {

    private String _id;
    private String name;
    private String gender;
    private Integer age;
    private Object hobbies;

}

第四步:声明MongoTemplate

@SpringBootTest(classes = Mongodb01Application.class)
class Mongodb01ApplicationTests {

    @Autowired
    MongoTemplate mongoTemplate;

    @Test
    void contextLoads() {
        Query query = new Query();
        query.addCriteria(Criteria.where("name").is("曹操"));

        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);

    }
}

模糊查询

//完全匹配
Pattern pattern = Pattern.compile("^" + "辽" + "$");
//右匹配
Pattern pattern = Pattern.compile("^.*" + "辽" + "$");
//左匹配
Pattern pattern = Pattern.compile("^" + "辽" + ".*$");
//模糊匹配
Pattern pattern = Pattern.compile("^.*" + "辽" + ".*$");
Query query = Query.query(Criteria.where(name).regex(pattern));  
List<User> users = mongoTemplate.find(query, User.class, classname);

//键为”user“包含”辽“的数据
Query query = new Query();
Criteria criteria = new Criteria();
criteria.and("user").regex(pattern);
query.addCriteria(criteria);
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值