主页 > 手机  > 

【Java】Mongodb

【Java】Mongodb

.bilibili /video/BV1nW421R7qJ

MongoDB在2007开发一款分布式文档数据库,由C++编写的。和传统的关系型数据库相比,更加简单,结构 key-value结构

MySQL数据库: 数据库-表-记录MongoDB : 数据库-集合-文档(记录)

文档类似于JSON对象,结构称为BSON

MongoDB适用场景

MongoDB不需要去明确指定一张表的具体结构,对字段的管理非常灵活,有很强的可扩展性。 支持高并发、高可用、高可扩展性,自带数据压缩功能,支持海量数据的高效存储和访问。 支持基本的CRUD、数据聚合、文本搜索和地理空间查询功能。

适用场景:

网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。

例如:弹幕、直播间互动信息、朋友圈信息、物流场景等

不适用场合:

高度事务性系统:例如银行系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。 安装、启动和基本命令 docker pull mongo:7.0.0 docker run -d --restart=always -p 27017:27017 --name mongo -v /opt/mongo/data/db:/data/db mongo:7.0.0 docker exec -it mongo mongosh

基本命令

show dbs db.version() #当前db版本 db.getMongo() #查看当前db的链接机器地址 db.help() #帮助 quit() #退出命令行 //创建数据库。如果数据库不存在,则创建数据库,否则切换到指定数据库。 use tingshu //查看当前数据库 db.getName() //显示当前数据库状态 db.stats() //删除当前数据库 db.dropDatabase() //创建集合 db.createCollection("User") //删除集合 db.User.drop() //文档操作 //添加 db.User.insert({name:'lucy',age:20,sex:true}) //查询 db.User.find() db.User.find({name:'lucy1'}) //修改 db.User.update({age:20}, {$set:{name:100}}) //删除 db.User.remove({}) SpringBoot整合MongoDB

spring-data-mongodb提供两种方式:MongoTemplate和MongoRepository

引入依赖

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mongodb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

创建配置文件application.yml

spring: data: mongodb: database: daijia host: 192.168.2.129 port: 27017

创建实体类

@Data @Document("user") //指定mongodb中的集合名字 public class User { @Id private ObjectId id; private String name; private Integer age; private String email; private Date createDate; }

MongoRepository

添加interface继承MongoRepository public interface UserRepository extends MongoRepository<User, ObjectId> { } 编写测试类 @SpringBootTest public class MongoRepositoryTest { @Autowired private UserRepository userRepository; //添加 @Test public void add() { User user = new User(); user.setName("mary"); user.setAge(30); user.setCreateDate(new Date()); userRepository.save(user); } //查询所有 @Test public void findAll() { List<User> list = userRepository.findAll(); System.out.println(list); } //根据id查询 @Test public void testFindById() { Optional<User> optional = userRepository.findById(new ObjectId("666a9a85f5294513720647ff")); boolean present = optional.isPresent(); if(present) { User user = optional.get(); System.out.println(user); } } //条件查询 + 排序 // age = 20 @Test public void testFindCondition() { //封装条件 User user = new User(); user.setAge(20); Example<User> example = Example.of(user); Sort sort = Sort.by(Sort.Direction.DESC, "name"); List<User> list = userRepository.findAll(example, sort); System.out.println(list); } //分页查询 @Test public void testPage() { //第一页从0开始的 PageRequest pageable = PageRequest.of(0,2); Page<User> page = userRepository.findAll(pageable); List<User> list = page.getContent(); System.out.println(list); } //更新 @Test public void testUpdateUser(){ //注意:先查询,再更新 Optional<User> optional = userRepository.findById( new ObjectId("64eee9dff317c823c62b4faf") ); if(optional.isPresent()){ User user = optional.get(); user.setAge(100); //user中包含id,就会执行更新 userRepository.save(user); System.out.println(user); } } //删除 @Test public void testDeleteUser(){ userRepository.deleteById( new ObjectId("64eee9dff317c823c62b4faf") ); } }

MongoTemplate

@SpringBootTest public class MongoTemplateTest { @Autowired private MongoTemplate mongoTemplate; //添加 @Test public void add() { User user = new User(); user.setName("test"); user.setAge(20); user.setCreateDate(new Date()); mongoTemplate.insert(user); } //查询所有 @Test public void findAll() { List<User> list = mongoTemplate.findAll(User.class); list.forEach(user->{ System.out.println(user); }); } //根据id查询 @Test public void testFindId() { User user = mongoTemplate.findById("666a9b5e9a3653796627bb3c", User.class); System.out.println(user); } //条件查询 @Test public void testCondition() { // where name=? and age=? Criteria criteria = Criteria.where("name").is("test").and("age").is(20); Query query = new Query(criteria); List<User> list = mongoTemplate.find(query,User.class); System.out.println(list); } //分页查询 @Test public void testPage() { // limit 0,2 Query query = new Query(); List<User> list = mongoTemplate.find(query.skip(0).limit(2), User.class); list.forEach(user->{ System.out.println(user); }); } //修改和删除 //修改 @Test public void testUpdateUser() { Criteria criteria = Criteria.where("_id").is("64eeeae31711344f35635788"); Query query = new Query(criteria); Update update = new Update(); update.set("name", "zhangsan"); update.set("age", 99); UpdateResult result = mongoTemplate.upsert(query, update, User.class);//改一条 //UpdateResult result = mongoTemplate.updateMulti(query, update, User.class);//改多条 long count = result.getModifiedCount(); System.out.println(count); } //删除 @Test public void testRemove() { Criteria criteria = Criteria.where("_id").is("64eeeae31711344f35635788"); Query query = new Query(criteria); DeleteResult result = mongoTemplate.remove(query, User.class); long count = result.getDeletedCount(); System.out.println(count); } }
标签:

【Java】Mongodb由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Java】Mongodb