MongoTemplate Tool

本文详细介绍了如何使用SpringBoot中的MongoTemplate进行MongoDB数据查询,包括基本查询、AND和OR条件、IN操作、比较查询、正则匹配、统计总数、聚合操作、排序和分页等。通过实例展示了MongoTemplate的各种用法,帮助开发者更好地理解和应用MongoDB数据操作。

序言

目前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);

比较查询

  1. get:>=
  2.  gt:>
  3.  lt<
  4.  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);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值