序言
目前SpringBoot 整合 mongodb主要的方式就是使用MongoTemplate.
这里整理积累下MongoTemplate的玩法.
查询
查询永远是大头~~
根据字段查询
//类似于SQL
Query query = new Query(Criteria.where("name").is("cuiyaonan2000@163.com"));
// 查询一条满足条件的数据
Map result = mongoTemplate.findOne(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | specialFieldQueryOne: " + result);
// 满足所有条件的数据
List<Map> ans = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | specialFieldQueryAll: " + ans);
And的使用
Query query = new Query(Criteria.where("name").is("cuiyoanan2000@163.com").and("age").is(18));
Map result = mongoTemplate.findOne(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | andQuery: " + result);
Or的使用
//如下的查询条件,是必须要name为cuiyaonan2000@163.com的,且age=18 或者 sing必须存在的.
Query query = new Query(Criteria.where("name").is("cuiyoanan2000@163.com")
.orOperator(Criteria.where("age").is(18),
Criteria.where("sign").exists(true)));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | orQuery: " + result);
//如下标识age为18 或者sing必须存在的查询
query = new Query(new Criteria().orOperator(Criteria.where("age").is(18), Criteria.where("sign").exists(true)));
In
Query query = new Query(Criteria.where("age").in(Arrays.asList(18, 20, 30)));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | inQuery: " + result);
比较查询
get:>=-
gt:> -
lt< -
let<=
// age > 18
Query query = new Query(Criteria.where("age").gt(18));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | compareBigQuery: " + result);
// age >= 18
query = new Query(Criteria.where("age").gte(18));
result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | compareBigQuery: " + result);
// age < 20
Query query = new Query(Criteria.where("age").lt(20));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | compareSmallQuery: " + result);
// age <= 20
query = new Query(Criteria.where("age").lte(20));
result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | compareSmallQuery: " + result);
正则
Query query = new Query(Criteria.where("name").regex("cuiyoanan2000@163.com"));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | regexQuery: " + result);
查询记录总数
Query query = new Query(Criteria.where("name").is("cuiyoanan2000@163.com"));
long cnt = mongoTemplate.count(query, COLLECTION_NAME);
System.out.println("query: " + query + " | cnt " + cnt);
聚合--即mysql中的分组
//根据user属性进行分组,返回每个分组的总数userCount和_id
//_id是不需要指定返回的,其它的需要指定返回
Aggregation aggregation = Aggregation.newAggregation(Aggregation.group("user").count().as("userCount"));
AggregationResults<Map> ans = mongoTemplate.aggregate(aggregation, COLLECTION_NAME, Map.class);
System.out.println("query: " + aggregation + " | groupQuery " + ans.getMappedResults());
排序
Query query = Query.query(Criteria.where("name").is("cuiyoanan2000@163.com")).with(Sort.by("age"));
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | sortQuery " + result);
分页
// limit限定查询2条
Query query = Query.query(Criteria.where("name").is("cuiyoanan2000@163.com")).with(Sort.by("age")).limit(2);
List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | limitPageQuery " + result);
// skip()方法来跳过指定数量的数据
query = Query.query(Criteria.where("name").is("cuiyoanan2000@163.com")).with(Sort.by("age")).skip(2);
result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
System.out.println("query: " + query + " | skipPageQuery " + result);
本文详细介绍了如何使用SpringBoot中的MongoTemplate进行MongoDB数据查询,包括基本查询、AND和OR条件、IN操作、比较查询、正则匹配、统计总数、聚合操作、排序和分页等。通过实例展示了MongoTemplate的各种用法,帮助开发者更好地理解和应用MongoDB数据操作。
1万+

被折叠的 条评论
为什么被折叠?



