mongodb增删改查

提示:本文是对尚硅谷的教案进行整理的学习笔记

一、概念

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组

在这里插入图片描述

1.mongoDB概念解析

SQL术语/概念MongoDB术语/概念解析/说明
databasedatabase数据库
tablecollection数据库/集合
rowdocument数据库行/文档
coloumnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyparmary key主键,MongoDB自动将**_id**字段设置为主键

2、SQL存储方式对比

在这里插入图片描述

3、数据库常用命令

作用命令解析
创建数据库use test如果test数据库不存在则创建test数据库,否则切换
查询所有数据库show dbs
删除当前使用数据库db.dropDatabase();
查看当前使用的数据库db.getName();
显示当前db状态db.stats();

4、文档(table)

文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点

下表列出了 RDBMS 与 MongoDB 对应的术语:

关系数据库MongoDB
表格集合
文档
字段
表联合嵌入文档
主键主键(MongoDB提供了key为_id)

需要注意的是:

1、文档中的键/值对是有序的。

2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。

3、MongoDB区分类型和大小写。

4、MongoDB的文档不能有重复的键。

5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。

2、.和$有特别的意义,只有在特定环境下才能使用。

3、以下划线"_"开头的键是保留的(不是严格要求的)。

5、集合

集合就是 MongoDB 文档组,类似于 关系数据库中的表格

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

创建集合命令

1、 创建一个集合(table)

db.createCollection( “collName”);

2、 得到指定名称的集合(table )

db.getCollection(“user”);

6、MongoDB数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位
Boolean布尔值
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比
Arrays数组类型。用于将数组或列表或多个值存储为一个键
Timestamp时间戳
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

二、常用增删改查命令

INSERT

 db.user.save({name:'zhangsan',age:21,sex:true})

解析:

db是关键字代表当前连接的数据库

user:集合(关系型数据库中的表table)

添加之后会自动生成_id 字段

_id是insert是MongoDB默认的字段是自动生成的

QUERY

查询全部
db.user.find()
WHERE
db.User.find({name:"zhangsan"})

# 相当于关系型数据库 select * from user where name = 'zhangsan'

查询指定字段
db.user.find({age:21}, {'name':1, 'age':1})

# select name, age from user where age = 21
排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列

db.user.find().sort({age:1})
分页limit()

在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据

# 跳过第0条数据,取3条
db.user.find().skip(0).limit(3)
IN
# select * from user where age in (21, 26, 32)
> db.user.find({age:{$in:[21,26,32]}})
COUNT
# select count(*) from User where age >20
> db.user.find({age:{$gt:20}}).count()
OR
# select * from user where age = 21 or age = 28
> db.user.find({$or:[{age:21}, {age:28}]})

UPDATE

# update Userset age = 100, sex = 0 where name = 'user1'
> db.user.update({name:"zhangsan"}, {$set:{age:100, sex:0}})

解析:

Update()有几个参数需要注意

db.collection.update(criteria, objNew, upsert, mult)

  1. criteria:需要更新的条件表达式
  2. objNew:更新表达式
  3. upsert:如FI标记录不存在,是否插入新文档(默认false)。
  4. multi:是否更新多个文档。
db.user.update({name:'zhangsan'}, {$set:{age:18}},{multi:true})

# 更新一条或者多条由multi控制

REMOVE

db.user.remove(id)

db.user.remove({})
//移除所有,可以在里面写条件

三、Spring boot 集成mongodb

spring-data-mongodb提供了MongoTemplateMongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活

基于MongoRepository开发CRUD

1、引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1.1配置文件配置mongodb地址
spring.data.mongodb.uri=mongodb://localhost:27017/test
spring.data.mongodb.username=root
spring.data.mongodb.password=123

# 账号和密码没有可以不填test是数据库名称
2、定义实体类
@Document("user")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
3、实现

Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了

在这里插入图片描述

1、不是随便声明的,而需要符合一定的规范
2、 查询方法以find | read | get开头
3、 涉及条件查询时,条件的属性用条件关键字连接
4、 要注意的是:条件属性首字母需要大写

5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

4、dao层继承MongoRepository类
@Repository
public interface UserRepository extends MongoRepository<User,String> {

}
5、测试
保存
User user = new User();
user.setAge(20);
user.setName("张三");

// 返回新增成功的对象,id不用写,mongodb会自动生成
User user1 = userRepository.save(user);
查询所有
List<User> all = userRepository.findAll();
System.out.println(all);
按照ID查询
User user = userRepository.findById("62dd301aa8721e2503a0acb3").get();
System.out.println(user);
条件查询
User user = new User();

user.setAge(50);

Example<User> userExample = Example.of(user);
List<User> userList = userRepository.findAll(userExample);
模糊查询
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
        .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
        .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
User user = new User();
user.setName("三");
Example<User> userExample = Example.of(user, matcher);
List<User> userList = userRepository.findAll(userExample);
分页查询
        // 构建排序
        Sort sort = Sort.by(Sort.Direction.DESC, "age");
        // 构建分页对象,0为第一页
        Pageable pageable = PageRequest.of(0, 10, sort);
//创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("三");
//创建实例
        Example<User> example = Example.of(user, matcher);
        Page<User> pages = userRepository.findAll(example, pageable);
修改

User user = userRepository.findById("62dd301aa8721e2503a0acb3").get();
user.setName("张三");
user.setAge(25);
User save = userRepository.save(user);
删除
userRepository.deleteById("62dd2f4ba477ef59af4602cd");
        user.setName("三");

//创建实例
        Example<User> example = Example.of(user, matcher);
        Page<User> pages = userRepository.findAll(example, pageable);
修改

User user = userRepository.findById("62dd301aa8721e2503a0acb3").get();
user.setName("张三");
user.setAge(25);
User save = userRepository.save(user);
删除
userRepository.deleteById("62dd2f4ba477ef59af4602cd");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值