pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
user实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
@Document("user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class user {
private String name;
private Integer age;
private String address;
}
UserRepository
import com.example.mongo_api_test.domain.user;
import org.bson.Document;
import java.util.List;
public interface UserRepository {
// 插入(略)
void insertuser(List<user> userlist);
// 批量获取
List<user> getuser();
List<user> getuser(String name);
List<user> queryuser(String name);
// 更新
user updateuser(user u);
// 删除
void deleteuser(user u);
// 模糊查询
List<user> getregexuser(String name);
// 聚合操作
List<Document> agg(String name);
}
UserRepositoryImpl
import com.example.mongo_api_test.domain.user;
import com.example.mongo_api_test.repository.UserRepository;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.data.mongodb.core.query.Query;
import javax.transaction.Transactional;
import java.util.List;
@Service
@Transactional
public class UserRepositoryImpl implements UserRepository {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public void insertuser(List<user> userlist) {
mongoTemplate.insert(userlist,user.class);
}
@Override
public List<user> getuser() {
return mongoTemplate.findAll(user.class);
}
@Override
public List<user> getuser(String name) {
Query query = Query.query(Criteria.where("name").is(name));
return mongoTemplate.find(query,user.class);
}
@Override
public List<user> queryuser(String name){
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("age").is(18),Criteria.where("name").is("浅汐")); // or条件
Query query = Query.query(criteria); // 组合查询放入query
query.with(Sort.by(Sort.Order.desc("age"))); // 按照年龄进行排序
return mongoTemplate.find(query,user.class);
}
@Override
public user updateuser(user u) {
Query query = Query.query(Criteria.where("name").is(u.getName()));
Update update = new Update();
update.set("age",u.getAge());
update.set("address", u.getAddress());
user d = mongoTemplate.findAndModify(query, update, user.class, "user");
return d;
}
@Override
public void deleteuser(user u) {
Query query = Query.query(Criteria.where("name").is(u.getName()));
mongoTemplate.remove(query,user.class);
System.out.println("删除成功");
}
@Override
public List<user> getregexuser(String address) {
Query query = Query.query(Criteria.where("address").regex(address));
return mongoTemplate.find(query,user.class);
}
@Override
public List<Document> agg(String name) {
TypedAggregation<user> agg = Aggregation.newAggregation(user.class,
Aggregation.group("name")
.count().as("数量")
.sum("age").as("年龄总和")
.avg("age").as("平均年龄")
.max("age").as("最大年龄"));
AggregationResults<Document> result = mongoTemplate.aggregate(agg, Document.class);
result.getMappedResults().forEach(document -> System.out.println(document));
return result.getMappedResults();
}
}
单元测试
import com.example.mongo_api_test.domain.user;
import com.example.mongo_api_test.repository.UserRepository;
import org.bson.Document;
import org.hibernate.stat.Statistics;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class)
public class usertest {
@Resource
private UserRepository userRepository;
@Test
public void test01() {
List<user> userlisr = new ArrayList<>();
user u1 = new user();
u1.setName("王");
u1.setAge(18);
u1.setAddress("山东省日照市");
user u2 = new user();
u2.setName("浅汐");
u2.setAge(23);
u2.setAddress("山东省济南市");
user u3 = new user();
u3.setName("妄念");
u3.setAge(35);
u3.setAddress("山东省威海市");
userlisr.add(u1);
userlisr.add(u2);
userlisr.add(u3);
userRepository.insertuser(userlisr);
}
@Test
public void test02() {
// List<user> userList = userRepository.getuser();
// for(user u: userList){
// System.out.println(u.getName()+" "+u.getAge()+" "+u.getAddress());
// }
/**
* 单条件查询 or
*/
List<user> userList = userRepository.queryuser("妄念");
for (user u : userList) {
System.out.println(u.getName() + " " + u.getAge() + " " + u.getAddress());
}
/**
* 模糊查询
*/
// List<user> userList = userRepository.getregexuser("日照");
// for (user u : userList) {
// System.out.println(u.getName() + " " + u.getAge() + " " + u.getAddress());
// }
}
@Test
public void test03() {
user u2 = new user();
u2.setName("浅汐");
u2.setAge(25);
u2.setAddress("山东省济南市历下区");
userRepository.updateuser(u2);
}
@Test
public void test04() {
user u3 = new user();
u3.setName("妄念");
u3.setAge(35);
u3.setAddress("山东省威海市");
userRepository.deleteuser(u3);
}
@Test
public void test05() {
userRepository.agg("王");
}
}
/*
* project:列出所有本次查询的字段,包括查询条件的字段和需要搜索的字段;
* match:搜索条件criteria
* unwind:某一个字段是集合,将该字段分解成数组
* group:分组的字段,以及聚合相关查询
* sum:求和(同sql查询)
* count:数量(同sql查询)
* as:别名(同sql查询)
* addToSet:将符合的字段值添加到一个集合或数组中
* sort:排序
* skip&limit:分页查询
*/