spring mongodb 动态构建语句

这篇博客探讨了在使用MongoTemplate时,如何通过BasicDBObject动态构建查询和投影语句。文章指出,传统的Query API在处理动态条件时可能不够灵活,例如在include字段时。作者展示了如何根据条件判断来添加不同的查询和投影元素,如$name$的in查询和根据配置选择要包含的字段。示例代码展示了如何组合多个DBObject以实现更复杂的聚合操作。
摘要由CSDN通过智能技术生成

mongotemplate Criteria 和 Query的api有时候不是很方便动态构建语句,比如Query.query().fields().include().include(),想根据条件判断传入include就不太好处理,或者有些更灵活的场景,可以用这种方式:

        BasicDBObject queryDBObject = new BasicDBObject();
        if (!CollectionUtils.isEmpty(names)) queryDBObject.append(datasourceConf.getNameField(), new BasicDBObject("$in", names));

        BasicDBObject project = new BasicDBObject("_id", 1);
        if (StringUtils.hasLength(datasourceConf.getNameField())) project.append(datasourceConf.getNameField(), 1);
        if (StringUtils.hasLength(datasourceConf.getTitleField())) project.append(datasourceConf.getTitleField(), 1);
        if (StringUtils.hasLength(datasourceConf.getDigestField())) project.append(datasourceConf.getDigestField(), 1);
        if (StringUtils.hasLength(datasourceConf.getMainbodyField())) project.append(datasourceConf.getMainbodyField(), 1);
        BasicDBObject projectDBObject = new BasicDBObject("$project", project);

        List list = new ArrayList<>();
        list.add(queryDBObject);
        list.add(projectDBObject);
        MongoCursor<Document> iterator = mongoTemplate.getCollection(datasourceConf.getTableName()).aggregate(list).iterator();
        while (iterator.hasNext()) {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值