springBoot集成mongo相关常用基础和复杂操作

本文详细介绍了如何使用MongoDB进行查询、基本更新操作以及数组操作。包括根据指定条件获取集合第一条数据、更新文档中的字段值、在数组中插入元素(避免重复)以及设置数组内对象的特定属性。示例代码展示了如何使用Criteria、Query、Update等工具进行操作,并提供了相应的日志信息以跟踪修改结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、查询

public <T> T selectMongoTopOne(Integer f1, String f2, String f3, Class<T> clazz) {
        Criteria[] arr = new Criteria[3];
        arr[0] = Criteria.where("field1").is(f1);
        arr[1] = Criteria.where("field2").is(f2);
        arr[2] = Criteria.where("field3").is(f3);
        Criteria criteria = new Criteria().andOperator(arr);
        Query query = new Query(criteria);
        query.with(Sort.by(Sort.Order.desc("createdTime"))).limit(1);
        return mongoTemplate.findOne(query, clazz);
}

提示:clazz为对应的mongo文档集合类

二、基本修改操作

private <T> void mongoUpdatePush(Integer f1, String f2, String updateKey, Object UpdateValue, Class<T> tClass) {
        Query query = new Query();
        query.addCriteria(Criteria.where("field1").is(f1).and("field2").is(f2));
        Update update = new Update();
        update.set(updateKey, UpdateValue);
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, tClass);
        log.info("查询mongo数据匹配{}条记录,修改了{}条记录", updateResult.getMatchedCount(), updateResult.getModifiedCount());

提示:tClass为对应的mongo文档集合类

三、数组中插入对象数据(重复则不插入)

 private <T> void mongoUpdatePush(Integer f1, String f2, String updateKey, Object UpdateValue, Class<T> tClass) {
        Query query = new Query();
        query.addCriteria(Criteria.where("field1").is(f1).and("field2").is(f2));
        Update update = new Update().addToSet(updateKey, UpdateValue);
        mongoTemplate.updateFirst(query, update, tClass);
    }

提示:tClass为对应的mongo文档集合类

四、数组中插入对象数据(添加过滤条件,对存在的数组项进行修改操作)

private void mongoUpdateSet(Integer f1, String f2, String dataName, BasicDBObject update) {
	    // 修改arrays数组下的某条记录dataUid变量值为test
	    BasicBSONObject eleSetBson = new BasicBSONObject();
        eleSetBson.put("arrays.$[arrays].dataUid", "test");
        BasicDBObject update = new BasicDBObject();
        update.put("$set", eleSetBson);
        // 查询对应唯一集合
        Criteria criteria = Criteria.where("field1").is(f1).and("field2").is(f2);
        // 拼接数组过滤filter参数-updateOptions 
        UpdateOptions updateOptions = new UpdateOptions();
        List list = new ArrayList();
        BasicDBObject eleFilterBson = new BasicDBObject();
        eleFilterBson.put("arrays.dataName", dataName);
        list.add(eleFilterBson);
        updateOptions.arrayFilters(list);
        mongoTemplate.getCollection("t_datas").updateOne(
                criteria.getCriteriaObject(),
                update,
                updateOptions
        );
    }

提示:array.dataName中array为数组变量名称,dataName为数组中的具体某个变量名,t_datas为对应的mongo文档集合名称。arrays.$[arrays].dataUid中的dataUid为数组下的具体某个变量名

参考文章:

https://blog.csdn.net/weixin_42260311/article/details/115634232

https://blog.csdn.net/maying0124/article/details/120214034

https://www.codercto.com/a/64352.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值