首页 > 数据库 >mongodb通过非映射方式操作documnet

mongodb通过非映射方式操作documnet

时间:2022-11-15 00:13:03浏览次数:56  
标签:映射 mongodb documnet 查询 sb bson 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() + ",
");
        }
        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);

 

标签:映射,mongodb,documnet,查询,sb,bson,Document
From: https://www.cnblogs.com/zhangshiwen/p/16891026.html

相关文章

  • Linux内存管理 (2)页表的映射过程【转】
    转自:https://www.cnblogs.com/arnoldlu/p/8087022.html 关键词:swapper_pd_dir、ARMPGD/PTE、LinuxPGD/PTE、pgd_offset_k。 Linux下的页表映射分为两种,一是Linux自......
  • 56.dom如何映射数据
    所谓的映射机制就是页面的标签和js中获取的页面标签对象,无论修改哪一个,另一个都会随之更新; 映射原理:浏览器在渲染页面的时候给每一个元素都设置了很多内置的属性(包含......
  • 虚拟机的端口映射
    增加一个端口映射netshinterfaceportproxyaddv4tov4listenport=2022listenaddress=10.191.21.96connectaddress=172.24.177.31connectport=22netshinterface......
  • Mongodb集群搭建
    mongodb的集群搭建方式主要有三种,主从模式,Replicaset模式,sharding模式,三种模式各有优劣,适用于不同的场合,属Replicaset应用最为广泛,主从模式现在用的较少,sharding模式最......
  • mongodb增删改查 及批量操作(二)
    1.增加insert插入多笔数据db.stu.insert([{_id:3,sn:'003',name:'zhangfei'},{_id:4,sn:'004',name:'guanyu'},{sn:'005',name:'liubei'}])增加复杂的文档db.stu.insert({na......
  • 巨蟒python全栈开发flask7 语音识别升级版&&mongoDB
    1.web简陋版玩具首先,复制上一节课的内容,将其中的语音文件删除掉,放入三个文件,然后,我们需要在app写入下面的内容下图是需要修改的地方:  Recorder_ok.js是一个web录音......
  • 遇到的问题mongodb
    1.MongoNetworkError:failedtoconnecttoserver?数据库没有启动,启动mongo数据库就好2.有些东西真的是要做好记录的,单纯为了自己日后可以查阅比较方便也就可以要做3.时......
  • MongoDB - 入门指南
    组件结构核心进程在MongoDB中,核心进程主要包含了mongod、mongos和mongosh三个。其中最主要的是mongod程序,其在不同的部署方案中(单机部署、副本集部署、分片集群......
  • mybatis中mapper文件中---数据库表字段与实体类属性的映射
    普通映射:<resultMapid="唯一标识"type="com.gao.entity.MyDemo"><!--主属性--><idcolumn="数据库主键字段名"property="实体类"/><......
  • 使用frp端口映射实现内网穿透(SSH、HTTP服务)
    文章共1,262字,阅读完预计需要2分钟7秒。文章篇幅适中,可以放心阅读。参考:[使用frp端口映射实现内网穿透(SSH、HTTP服务)-勇者の小栈](https://www.ken-chy129.cn/......