MongoTemplate基础使用

一、基础查询

1.is查询
Query query = new Query();
// where...is... 相当于 where ? = ?
query.addCriteria(Criteria.where("数据库表字段名").is("你的参数"));
//分页条件
query.skip(size*(page-1)).limit(size);
// findOne 返回的是一个对象 Class代表你的表对应的映射类
mongoTemplate.findOne(query, Class.class ,"数据库表名" );
// find 返回的是数组
mongoTemplate.find(query, Class.class,"数据库表名");

2.in查询
ArrayList<String> list = new ArrayList<>();
// list代表你的数据
Query query = Query.query(Criteria.where("数据库字段").in(list));
mongoTemplate.find(query, Class.class,"数据库表名");


// 如果想要查询指定的数据是否在数据库的数组中,可以用以下方法
Query query = Query.query(Criteria.where("数据库字段(数组)").is("你的数组"));

3.字符模糊查询
Query query = Query.query(Criteria.where("name").regex("小"));
4.时间比较查询

lt:小于 lte: 小于等于 gte :大于等于 gt: 大于

if (null!=param.getBeginTime()){
    query.addCriteria(Criteria.where("alarmTime").gte(param.getBeginTime()));
}
if (null!=param.getEndTime()){
    query.addCriteria(Criteria.where("alarmTime").lt(param.getEndTime()));
}
5.指定字段不返回
query.fields().exclude("field");
6.数组查询
数组格式:
{
    name:"小明",
    age:13,
    friends:[
        {
            name:"小王",
            age:12
        },
        {
            name:"小李",
            age:18
        }
    ]
}


当要查询朋友中姓名为小王时
Query query = new Query();
query.addCriteria(Criteria.where("friends.$.name").is("小王"));
mongoTemplate.find(query, User.class,"数据库表名");


同样更新时也是一样,但是注意,更新时查询条件需要添加
query.addCriteria(Criteria.where("friends").elemMatch(Criteria.where("name").is("小王"));
Update update = Update.update("friends.$.friends", "小赵");

二、基础操作

1.数组中添加或删除一条数据
Query query = Query.query(Criteria.where("_id").is("id"));
Update update = new Update();
// push方法可以在数组中添加一条数据
// pull方法可以在数组中删除一条数据
// update.pull()
update.push("字段名称", "data");
mongoTemplate.updateFirst(query, update, Class.class);
2.批量添加
ArrayList<Class> list = new ArrayList<>();
mongoTemplate.insert(list, Class.class);
3.修改
public int conduct(AlarmDetail alarmDetail) {
        int count = 0;
        try {
            Query query = new Query();
            query.addCriteria(Criteria.where("_id").is(new ObjectId(alarmDetail.getId())));
            query.with(Sort.by(Sort.Direction.DESC, "alarmTime"));
            AlarmDetail alarm = mongoTemplate.findOne(query, AlarmDetail.class, "alarm");
            if (Objects.nonNull(alarm)) {
                Query query2 = new Query();
                query2.addCriteria(Criteria.where("_id").is(new ObjectId(alarm.getId())));
                Update update = new Update();
                update.set("status", 1);
                update.set("opRemark", alarmDetail.getOpRemark());
                update.set("opUserId", alarmDetail.getOpUserId());
                update.set("opUserName", alarmDetail.getOpUserName());
                update.set("opTime", new Date());
                mongoTemplate.updateFirst(query2, update, AlarmDetail.class, "alarm");
                count = 1;
            }
        } catch (Exception e) {
            log.error("通过参数alarmDetail:{}处理告警信息时出现异常:{}", JSON.toJSONString(alarmDetail), e.getMessage());
            e.printStackTrace();
        }
        return count;
    }

三、其他操作

1.数字字符串排序操作
对数据库中数字字符串排序:
加上这一行就行了 亲身体验
query.collation(Collation.of("zh").numericOrdering(true));
还有根据字符串排序时又是顺序并不是我们所想的字典序,加上下面这个也ok
query.collation(Collation.of("zh"));

资料来源:https://blog.csdn.net/m0_53556997/article/details/122256645

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值