什么是mongodb
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
配置(无密码)
有密码就在mongodb前面加上比如://admin:admin
spring:
data:
mongodb:
uri: mongodb://47.94.91.73/test?authSource=admin&authMechanism=SCRAM-SHA-1
实体类
package com.wang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document("good") //绑定映射为mongodb中的哪个Collection
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
@Id
@Field(value = "_id")
private ObjectId id;
@Field(value = "name")
private String name;
@Field(value = "price")
private String price;
@Field(value = "remark")
private String remark;
}
测试
package com.wang;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.wang.pojo.Goods;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import javax.annotation.Resource;
import java.util.List;
import java.util.regex.Pattern;
@SpringBootTest
class SpringBootMongoApplicationTests {
@Resource
private MongoTemplate mongoTemplate;
@Test
void contextLoads() {
}
@Test
void findAll(){
List<Goods> all = mongoTemplate.findAll(Goods.class);
System.out.println(all);
}
//添加操作
@Test
public void insert(){
Goods goods = new Goods();
goods.setName("笑啊");
goods.setRemark("xxx");
goods.setPrice("11");
Goods good = mongoTemplate.insert(goods);
System.out.println(good);
}
@Test
public void findByNameAndPrice(){
Query query = new Query(Criteria.where("name").is("笑啊").and("price").is("11"));
List<Goods> goods = mongoTemplate.find(query, Goods.class);
System.out.println(goods);
}
//模糊查询
@Test
public void ByName(){
String name = "笑";
String regex = String.format("%s%s%s", "^.*", name, ".*$");
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Query query = new Query(Criteria.where("username").regex(pattern));
List<Goods> goods = mongoTemplate.find(query, Goods.class);
System.out.println(goods);
}
@Test
void delete() {
Criteria criteria=new Criteria();
criteria.and("_id").is("xxxxxxx");
Query query = new Query(criteria);
DeleteResult remove = mongoTemplate.remove(query, Goods.class);
System.out.println(remove);
}
@Test
void update(){
//首先根据id得到此用户的值
Goods goods = mongoTemplate.findById("xxxxxxxx", Goods.class);
//设置需要修改的值
goods.setName("xx");
goods.setRemark("xxx");
goods.setPrice("xx");
//调用方法
Query query = new Query(Criteria.where("_id").is(goods.getId()));
Update update = new Update();
update.set("name", goods.getName());
update.set("remark", goods.getRemark());
update.set("price", goods.getPrice());
UpdateResult upsert = mongoTemplate.upsert(query, update, Goods.class);
System.out.println(upsert);
}
}