作者:Zan吴磊Leo | 来源:互联网 | 2023-05-19 12:48
目录1.MongoDB基本介绍2.MongoDB的特点3.MongoDB的体系结构4.MongoDB的数据类型5.SpringBoot整合MongoDB**1.导入依赖2
目录
1.MongoDB基本介绍
2.MongoDB的特点
3.MongoDB的体系结构
4.MongoDB的数据类型
5.SpringBoot整合MongoDB **
1.导入依赖
2.启动MongoDB数据库
3.编写启动类
4.编写实体类(基本操作 每一个表都对应一个实体)
5.测试 增删改查(API)
1.MongoDB基本介绍
MongoDB介绍_30岁老阿姨的博客-CSDN博客_mongodb介绍
MongoDB是一个文档数据库,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是BSON,一种类似JSON的二进制形式的存储格式,简称Binary JSON ,和JSON一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。
对于数据量大而言,显然不能够使用关系型数据库和内存数据库进行存储,我们需要通过MongoDB进行存储
2.MongoDB的特点
MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:
-
面向集合存储,易于存储对象类型的数据
-
模式自由
-
支持动态查询
-
支持完全索引,包含内部对象
-
支持复制和故障恢复
-
使用高效的二进制数据存储,包括大型对象(如视频等)
-
自动处理碎片,以支持云计算层次的扩展性
-
支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程 序, 社区中也提供了对Erlang及.NET 等平台的驱动程序
-
文件存储格式为 BSON(一种 JSON 的扩展)
3.MongoDB的体系结构
MongoDB 的逻辑结构主要由:数据库(database)、 集合(collection)、文档(document)这三部分组成的。
-
MongoDB 的文档(document),相当于关系数据库中的一行记录。
-
多个文档组成一个集合(collection),相当于关系数据库的表。
-
多个集合(collection),逻辑上组织在一起,就是数据库(database)。
-
一个 MongoDB 实例支持多个数据库(database)。 文档(document)、集合(collection)、数据库
-
SQL和MongoDB对比
RDBMS | MongoDB |
---|
database(数据库) | database(数据库) |
table (表) | collection( 集合) |
row( 行) | document( BSON 文档) |
column (列/字段) | field (字段) |
index(唯一索引、主键索引) | index (支持地理位置索引、全文索引) |
join (主外键关联) | MongoDB不支持 |
primary key(指定某个列做主键) | primary key (不需要指定 固定 _id 字段做为主键 自带的) |
4.MongoDB的数据类型
数据类型 | 说明 | 解释说明 | Document举例 |
---|
String | 字符串 | UTF-8 编码的字符串才是 合法的。 | {key:“cba”} |
Integer | 整型数值 | 根据你所采用的服务器, 可分为 32 位或 64 位。 | {key:1} |
Boolean | 布尔值 | 用于存储布尔值(真/ 假)。 | {key:true} |
Double | 双精度浮点值 | 用于存储浮点值 | {key:3.14} |
ObjectId | 对象ID | 用于创建文档的ID | {_id:new ObjectId()} |
Array | 数组 | 用于将数组或列表或多个 值存储为一个键 | {arr:[“a”,“b”]} |
Timestamp | 时间戳 | 从开始纪元开始的毫秒数 | { ts: new Timestamp() } |
Object | 内嵌文档 | 文档可以作为文档中某个 key的value | {o:{foo:“bar”}} |
Null | 空值 | 表示空值或者未定义的对 象 | {key:null} |
Date或者 ISODate | 格林尼治时间 | 日期时间,用Unix日期格 式来存储当前日期或时 间。 | {birth:new Date()} |
File | 文件 | 1、二进制转码(Base64)后 存储 (<16M) 2、 GridFS(>16M) | GridFS 用两个集合来存储一个文件:fs.files与 fs.chunks 真正存储需要使用mongofiles -d gridfs put song.mp |
5.SpringBoot整合MongoDB **
1.导入依赖
org.springframework.bootspring-boot-starter-parent2.1.0.RELEASEorg.springframework.bootspring-boot-starter-data-mongodborg.projectlomboklombok1.18.10org.springframework.bootspring-boot-starter-testtestorg.apache.maven.pluginsmaven-compiler-plugin3.11.8UTF-8
2.启动MongoDB数据库
看网上一些教程吧,我这里linux安装的
3.编写启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MongoApplication {public static void main(String[] args) {SpringApplication.run(MongoApplication.class, args);}
}
4.编写实体类(基本操作 每一个表都对应一个实体)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("user")//这里最好写上 表示操作哪个集合(表)
public class User {@Idprivate ObjectId id;private String username;private Integer age;private String address;
}
5.测试 增删改查(API)
1.首先依赖出入 MongoTemplate(MongoDB依赖中的)
2.新增代码(如果数据库中没有集合(表),会自动创建)
// 新增@Testpublic void text01(){User user = new User(new ObjectId(),"jack",11,"天津");
// User user1 = mongoTemplate.insert(user);User user1 = mongoTemplate.insert(user, "user");//指定字段添加System.out.println(user1);}
3.删除
@Testpublic void text02(){Query query = new Query();//条件对象DeleteResult remove = mongoTemplate.remove(query,User.class);//没条件 全删 后边要加上实体类对应的表System.out.println(remove);//两条数据}
@Test//根据条件删除public void text03(){Query query = new Query(Criteria.where("id").is(new ObjectId("6354084f8136ce1f102b9003")));DeleteResult remove = mongoTemplate.remove(query, User.class);System.out.println(remove);}@Test//多条件删除public void text04(){Query query = new Query(Criteria.where("username").is("jack1").and("age").is(12));DeleteResult remove = mongoTemplate.remove(query,User.class);System.out.println(remove);}
4.修改
@Testpublic void text05(){Query query = new Query(Criteria.where("age").gt(12));//条件 age > 12Update update = new Update();update.set("username","huahua");UpdateResult updateResult = mongoTemplate.updateMulti(query, update, User.class);System.out.println(updateResult);}
5.查询
// 查询 根据id 做查询@Testpublic void text06(){User user = mongoTemplate.findById(new ObjectId("6354086f8136ce237011c305"), User.class);System.out.println(user);
// 全查询List userList = mongoTemplate.findAll(User.class);for (User user1 : userList) {System.out.println(user1);}}@Test//条件查询public void text07(){Query query = new Query(Criteria.where("username").regex("h"));List users = mongoTemplate.find(query, User.class);System.out.println(users);}@Test //条件查询 orpublic void text08(){Query query = new Query(Criteria.where("").orOperator(Criteria.where("age").is(14),Criteria.where("address").regex("海")));List users = mongoTemplate.find(query, User.class);for (User user : users) {System.out.println(user);}}@Test//分页查询public void text09(){Query query = new Query();query.skip(1).limit(3);//第一条数据和第二条数据 从第几页开始 展示几条数据query.with(Sort.by(Sort.Direction.DESC,"age"));//降序List users = mongoTemplate.find(query, User.class);for (User user : users) {System.out.println(user);}}
springboot操作mongodb基本都是一些api ,用到的时候查询即可