前言

  我是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);

【API知识】MongoTemplate非映射方式操作Document的更多相关文章

  1. 百度地图Api进阶教程-实例高级操作8.html

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. Elasticsearch学习系列之单模式下API的增删改查操作

    这里我们通过Elasticsearch的marvel插件实现单模式下API的增删改查操作 索引的初始化操作 创建索引之前可以对索引进行初始化操作,比如先指定shard数量以及replicas的数量 代 ...

  3. 操作Document文档

    利用客户端操作Document文档数据 1.创建一个文档(创建数据的过程,向表中去添加数据) 请求方式:Post 请求地址:es所在IP:9200/索引库/Type/文档ID(可给可不给,代表唯一标识 ...

  4. C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】

    为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:se ...

  5. PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

    问题描述:   用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接) 经测试,代码只能对数字进行正常的增删改操作,非数字操作无效   但要在课程名称中输入中文,应该如果修改呢?   存 ...

  6. 05_Elasticsearch 单模式下API的增删改查操作

    05_Elasticsearch 单模式下API的增删改查操作 安装marvel 插件: zjtest7-redis:/usr/local/elasticsearch-2.3.4# bin/plugi ...

  7. Elasticsearch 单模式下API的增删改查操作

    <pre name="code" class="html">Elasticsearch 单模式下API的增删改查操作 http://192.168. ...

  8. ARM非对齐操作异常解决过程

    在测试MF固件时,发生一个非常诡异的异常,代码如下: CLR_DBG_Commands::Monitor_EraseMemory* cmd = (CLR_DBG_Commands::Monitor_E ...

  9. Java8 新特性 Stream 非短路终端操作

    非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

随机推荐

  1. Python开发——数据类型【字符串格式化】

    字符串格式化之——% # 字符串格式化 msg = 'I am %s , My hobby is %s'%('yuan','play') print(msg) # I am yuan , My hob ...

  2. centos free详解

    CentOS 6及以前 $ free total used free shared buffers cached Mem: 4040360 4012200 28160 0 176628 3571348 ...

  3. 批量屏蔽符合条件的IP地址,支持添加白名单,IP段,增量,大于指定次数的IP

    批量屏蔽符合条件的IP地址,支持添加白名单,IP段,增量 大概的思路是利用sh,从日志中提取出来对应的IP地址,然后再交由python进行对比,判断,最终将需要添加至iptables列表中的IP写入到 ...

  4. CentOS上部署.net core

    1.阿里云更换系统安装CentOS7.4 64位版本 2.试用XShell 5 登录服务器 参考https://www.microsoft.com/net/learn/get-started/linu ...

  5. ABP 权限拦截 第二篇

    由于访问人数过多,我今天从新整理一下ABP权限认证机制,帮助大家更容易读懂 1.Abp 的权限拦截主要通过过滤器,    public class AbpAuthorizationFilter : I ...

  6. CMD命令启动和关闭SQL服务

    1.开启:net start mssqlserver 2.关闭:net stop mssqlserver

  7. 为什么说Redis是单线程的以及Redis为什么这么快!

    参考文章:https://blog.csdn.net/xlgen157387/article/details/79470556 redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用 ...

  8. [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  9. fly插件飞向购物车

    首先载入jQuery库文件和jquery.fly.min.js插件. 插件官方: https://github.com/amibug/fly, 官方例子: http://codepen.io/hzxs ...

  10. ku8eye 安装概览

    ku8eye web 开发环境 当前版本的 ku8eye web开发环境 以docker镜像方式提供,下载地址为: http://pan.baidu.com/s/1gdYk4CV 文件名说明: ku8 ...