Mongodb
一、Mongodb简介
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
使用行业:
游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
视频直播,使用 MongoDB 存储用户信息、礼物信息等
二、下载与安装
下载地址
https://www.mongodb.com/try/download/enterprise
安装
1、在D:\mongodb目录下创建data文件夹,并在data文件夹下面创建db文件夹用来存储数据
2、在D:\mongodb\bin目录下执行cmd命令
启动服务端
mongod --dbpath=..\data\db
启动客户端
mongo --host=127.0.0.1 --port=27017
3、安装navicat测试是否可以连接成功
三、数据操作CRUD
数据添加
db.book.save({"name":"springboot",type:"springboot"});
数据查询
db.book.find({type:"springboot"});
删除数据
db.book.remove({type:"springboot"});
更改数据
--每次更改第一条满足条件的数据
db.book.update({type:"springboot"},{$set:{type:"springboot3"}});
--更改多条数据
db.book.updateMany({type:"springboot"}, {$set:{type:"springboot3"}})
四、SpringBoot整合MongonDB
引入依赖
<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>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.yml配置文件
spring:
data:
mongodb:
uri: mongodb://localhost/mongodb
logging:
level:
org.springframework.data.mongodb.core: debug
Domain
package com.travel.domain;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.List;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 10:53
*/
@Data
@Document("users")
public class User {
@Id
private String id;
private String name;
private Integer age;
private List<String> hobbies = new ArrayList<String>();
}
Repository
package com.travel.repository;
import com.travel.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 10:52
*/
public interface UserRepository extends MongoRepository<User, String> {
}
Service
package com.travel.service;
import com.travel.domain.User;
import java.util.List;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 11:23
*/
public interface IUserService {
List<User> list();
User get(String id);
void save(User user);
void update(User user);
void delete(String id);
}
ServiceImpl
package com.travel.service.impl;
import com.travel.domain.User;
import com.travel.repository.UserRepository;
import com.travel.service.IUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 11:23
*/
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements IUserService {
private final UserRepository userRepository;
@Override
public List<User> list() {
return userRepository.findAll();
}
@Override
public User get(String id) {
return userRepository.findById(id).orElse(null);
}
@Override
public void save(User user) {
userRepository.save(user);
}
@Override
public void update(User user) {
userRepository.save(user);
}
@Override
public void delete(String id) {
userRepository.deleteById(id);
}
}
测试
package com.travel.service;
import com.travel.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 11:28
*/
@SpringBootTest
public class MongoDemo {
@Autowired
private IUserService userService;
@Test
public void save() {
User user = new User();
user.setAge(17);
user.setName("John3");
user.setHobbies(Arrays.asList("Javascript", "C"));
userService.save(user);
}
@Test
public void update() {
User user = new User();
user.setId("65470fe4a57aa1595800f097");
user.setAge(19);
user.setName("John");
userService.update(user);
}
@Test
public void get() {
System.out.println(userService.get("65470fe4a57aa1595800f097"));
}
@Test
public void list() {
System.out.println(userService.list());
}
@Test
public void delete() {
userService.delete("111");
}
}
package com.travel.service;
import com.travel.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
/**
* @author XYC
* @version 1.0
* @date 2023/11/5 14:27
*/
@SpringBootTest
public class MongoTemplateTest {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void testFind() {
// 范围查询15-20年龄
Criteria criteria = Criteria.where("age").gte(15).lte(20);
Query query = new Query();
query.addCriteria(criteria);
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
@Test
public void pageTest() {
Query query = new Query();
// 用户分页查询
long count = mongoTemplate.count(query, User.class);
if (count < 0) {
System.out.println("查询总数为:" + count);
return;
}
query.skip(2).limit(3);
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
@Test
public void rankTest() {
// 排序
Query query = new Query();
query.with(Sort.by(Sort.Direction.DESC, "id"));
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
}
五、注意
使用MongoDB时,必须打开服务端和客户端