【API知识】MongoTemplate非映射方式操作Document
前言
我是MongoDB小白,刚开始学。不过,我猜大多数使用MongoDB的,都是采用映射方式处理的,即需要有定义好的用于映射的实体类。但是这样的话,如果表的结构在未来可能频繁变动,增删字段,甚至添加新的数据表。那么这种方式就不太好用了。这时候就需要用非映射的方式处理。
映射方式操作Document
这种方式最常见,一般就是预定义一些映射的实体类,然后打上@Ducument注解。在使用MongoTemplate的查询文档的时候,一般就是根据查询语句创建一个Query对象,然后用MongoTemplate.find(query, entityClass)这样的方式,就可以返回对应的实体对象集合。这样的例子非常多,我这里就不贴代码了。
非映射方式操作Document
非映射方式操作Document,就是不需要预定义实体类,也就是没有实体类。我们只需要JSON数据就可以了。而刚好Document对象有提供toJson方法,可以返回一个JSON字符串。非映射方式不能直接用MongoTemplate直接find,而是要先获取集合对象,然后,在集合内部,相当于在表内部查询。
例子如下:
public String findTest() { //1.获取集合对象 MongoCollection<Document> collection = mongoTemplate.getCollection("test"); //2.创建用于查询的BSON对象 Bson bson = eq("field", "value"); //3.利用bson条件查询结果 FindIterable<Document> documents = collection.find(bson); //4.将结果拼接成json数组 StringBuilder sb = new StringBuilder(); sb.append("["); for(Document document : documents) { sb.append(document.toJson() + ",\n"); } sb.append("]"); return sb.toString(); }
可用的工具包
其中,eq()方法是Mongo Spring Boot整合包提供的。它表示条件:当文档的某个字段等于某个值的时候,文档被选中。这个方法是Filters的静态方法,如果要直接调用,可以通过静态引入:
import static com.mongodb.client.model.Filters.*;
这个类中,有很多用于过滤的方法。如eq(),ne(),gt(),lt(),in()等等更查询条件有关的。
如果你需要用于更新的方法,那么你可导入Updaters的静态方法,如set(),unSet(),rename()等等。
例子:
//注意key必须是字符串,而value可以是任意类型 Bson udpateBson = set("key", "value");
以上就是把文档的某个字段的值改为设定的值。
注:这两个类都来自mongodb-driver-core.jar包的com.mongodb.client.model目录下,想看更多功能可自行查看。
如何结合查询和更新的bson来执行一个更新操作呢?
前面的更新bson,只说明了怎么更新,而没有说明要更新谁。而一个更新操作,必然包含查询,和修改两个操作。那么如何整合两个bson来使用呢?案例如下:
//查询条件 Bson searchBson = eq("job", "programmer"); //修改操作 Bson uddateBson = set("label", "666"); //修改所有符合条件的文档 collection.updateMany(searchBson, uddateBson);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库