mongodb入门
哪 吒 人气:0一、MongoDB是什么
1、维基百科
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2、简而言之
MongoDB是文档型的NoSQL数据库,数据以文档(对应关系型数据库的记录)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串,使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据,符合我们的阅读习惯。
在Java、Python中对JSON都有很好的支持,数据从MongoDB中读取出来后,可无需转换直接使用;支持丰富的数据结构,Value可以是普通的整型、字符串、数组、嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。
二、MongoDB 的应用场景
1、MongoDB事务
MongoDB目前只支持单文档事务,MongoDB暂时不适合需要复杂事务的场景。
灵活的文档模型JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,可用复制集满足数据高可靠、高可用的需求,运维较为简单、故障自动切换可扩展分片集群海量数据存储。
2、多引擎支持各种强大的索引需求
- 支持地理位置索引
- 可用于构建各种O2O应用
- 文本索引解决搜索的需求
- TTL索引解决历史数据过期的需求
- Gridfs解决文件存储的需求
- aggregation & mapreduce解决数据分析场景需求,可以自己写查询语句或脚本,将请求分发到 MongoDB 上完成。
3、具体的应用场景
传统的关系型数据库在解决三高问题上的力不从心。
何为三高?
- High performance - 对数据库高并发读写的需求。
- Huge Storage - 对海量数据的高效率存储和访问的需求。
- High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
- MongoDB可以完美解决三高问题。
4、以下是几个实际的应用案例:
(1)游戏场景
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
(2)物流场景
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
(3)社交场景
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
(4)物联网场景
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
(5)视频直播
使用MongoDB存储用户信息、点赞互动信息。
5、选择MongoDB的场景总结:
- 数据量大
- 读写操作频繁
- 数据价值较低,对事务要求不高
三、MongoDB对比MySQL
1、关键字对比
MySQL | MongoDB | 解释说明 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 字段/域 |
index | index | 索引 |
join | 嵌入文档 | 表关联/MongoDB不支持join,MongoDB通过嵌入式文档来替代多表连接 |
primary key | primary key | 主键/MongoDB自动将_id字段设置为主键 |
四、SpringBoot整合MongoDB实现增删改查
1、引入pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>MongoDBProject</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies> </project>
2、启动类Application
package com.guor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
3、实体类
package com.guor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }package com.guor.bean; import org.springframework.data.annotation.Id; import java.io.Serializable; public class User implements Serializable { @Id private String id;//主键 //该属性对应mongodb的字段的名字,如果一致,则无需该注解 private String name; private Integer age; private String phone; private String parentid;//上级ID 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; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getParentid() { return parentid; } public void setParentid(String parentid) { this.parentid = parentid; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", age=" + age + ", phone='" + phone + '\'' + ", parentid='" + parentid + '\'' + '}'; } }
4、UserRepository
package com.guor.dao; import com.guor.bean.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository<User,String> { Page<User> getPageByid(String parentId, Pageable pageable); }
5、业务层service
package com.guor.service; import com.guor.bean.User; import com.guor.dao.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public void insertUser(User user){ userRepository.save(user); } public void updateUser(User user){ userRepository.save(user); } public void deleteUserById(String id){ userRepository.deleteById(id); } public List<User> getAllUser(){ return userRepository.findAll(); } /** * 根据id查询评论 */ public User getUserById(String id){ return userRepository.findById(id).get(); } /** * 分页 */ public Page<User> getPageByid(String parentId, int page , int size){ return userRepository.getPageByid(parentId, PageRequest.of(page-1,size)); } }
6、测试类
package com.guor; import com.guor.bean.User; import com.guor.service.UserService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class MongoDBTest { @Autowired private UserService userService; @Test public void saveUser(){ User user=new User(); user.setName("比比东"); user.setAge(22); user.setPhone("1314"); userService.insertUser(user); } @Test public void getUser(){ List<User> list = userService.getAllUser(); for(User user : list){ System.out.println(user); } } @Test public void updateUser(){ User user=new User(); user.setId("61e3d9ac57b3da05fd0fffed"); user.setName("云韵"); user.setAge(29); user.setPhone("18525351592"); user.setParentid("1"); userService.updateUser(user); } @Test public void getUserPage(){ Page<User> pageResponse = userService.getPageByid("1",1, 2); System.out.println("----总记录数:"+pageResponse.getTotalElements()); System.out.println("----当前页数据:"+pageResponse.getContent()); } @Test public void deleteUser(){ String id = "61e3daf31faa1f5b0e6849f8"; userService.deleteUserById(id); } }
7、插入
8、更新
9、查询
加载全部内容