Mongodb使用总结

Mongodb使用总结

  • 基于内存操作,便于与网站交互
  • 数据库-集合-文档(存储多种数据类型),我们的操作都是基于单文档进行操作,并且通过冗余字段进行操作
  • 嵌入式数组文档减少了对昂贵连接的需求
  • DoucmentArray:[子文档(动态)]

操作

都是基于文档操作

@Document("wf_process")
@Data
@NoArgsConstructor
@FieldNameConstants
public class ProcessDefinition implements SynchronizerSign {
    /**
     * 流程ID
     */
    @Id  //与数据库_id映射,@Document("wf_process")
    @Indexed(unique = true)索引3
    @JsonSerialize(using = ToStringSerializer.class) 精度丢失
    private Long procId;

文档

//增加文档
ProcessDefinition resProcess = mongoTemplate.insert(wfProcess);

//改
Query query = new Query();
Update update = new Update();
Criteria criteriaOne = Criteria.where(ProcessDefinition.Fields.procId).is(processVo.getProcId());//找到文档
update.set(ProcessDefinition.Fields.procName, procName);//修改的属性
mongoTemplate.updateMulti(query,update,ProcessDefinition.class);//批量修改

//查询
ProcessDefinition wfProcess = mongoTemplate.findOne(query, ProcessDefinition.class);//find查询满足条件的文档集合

//删除 逻辑删除 update     物理删除   remove
//query.fields进行字段过滤

文档数组

 Query query = new Query();
 Update update = new Update();
            query.addCriteria(Criteria.where(ProcessDefinition.Fields.procId).is(pub.getProcId()));//找到文档

//添加元素到数组  addToSet去重
update.addToSet(ProcessDefinition.Fields.flowNodes,pub);
             mongoTemplate.upsert(query,update,ProcessDefinition.class);//upsert 找不到文档时会自动创建文档
//不去重效率高
update.push("likes").each(objects);

//更新数组元素
Criteria.where(ProcessDefinition.Fields.flowNodes).

                 elemMatch(Criteria.where(PublicFlowNode.Fields.nodeId).is(pub.getNodeId())));//elemMatch找到数组元素  flowNodes.nodeID = nodeID
update.set("flowNodes.$",pub);//$获取到的元素

        query.addCriteria(Criteria.where(ProcessInstanceData.Fields.dataId)
                .is(dataId)
                .and("instanceData.flowNodeId")
                .is(deleteId));

                mongoTemplate.updateFirst(query,update,ProcessDefinition.class);

//更新数组元素某个属性
update.set("flowNodes.$.nextId", nodeId);

//获取数组中的元素
query.fields().elemMatch(ProcessInstanceData.Fields.instanceData,
                Criteria.where(InstanceData.Fields.flowNodeId).

                        is(nodeId));//fields()过滤字段
        ProcessInstanceData processInstanceData = mongoTemplate.findOne(query, ProcessInstanceData.class);
List instanceDatas = processInstanceData.getInstanceData();
instanceDatas.get(0);

//获取数组中的指定几个元素
//封装对象列表查询条件
        List commonOperations = new ArrayList<>();
        //1. 指定查询主文档
        MatchOperation match = Aggregation.match(Criteria.where(ProcessInstanceData.Fields.dataId).

                is(dataId));
        commonOperations.add(match);
        //2. 指定投影,返回哪些字段
        ProjectionOperation project = Aggregation.project(ProcessInstanceData.Fields.instanceData);
        commonOperations.add(project);
        //3. 拆分内嵌文档,  可以查询需要的记录
        UnwindOperation unwind = Aggregation.unwind(ProcessInstanceData.Fields.instanceData);
        commonOperations.add(unwind);
        //4. 指定查询  指定几个数组元素
        MatchOperation match2 = Aggregation.match(
                Criteria.where("instanceData.flowNodeId").in(nodeIds));
        commonOperations.add(match2);

        //5.创建管道查询对象
        Aggregation aggregation = Aggregation.newAggregation(commonOperations);
        AggregationResults aggregate = mongoTemplate
                .aggregate(aggregation, ProcessInstanceData.class, JSONObject.class);
//删除数组元素
instanceData = 删除的对象
update.pull(ProcessInstanceData.Fields.instanceData,instanceData);

Original: https://www.cnblogs.com/lcjtt/p/16610162.html
Author: ZWLD
Title: Mongodb使用总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598918/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringMvc(四)- 下载,上传,拦截器

    1、图片下载 图片下载:将服务器端的文件以流的形式写到客户端,通过浏览器保存到本地,实现下载; 1.1 图片下载步骤 1.通过session获取上下文对象(session.getS…

    数据库 2023年6月16日
    065
  • 1_requests基础用法

    requests 模块的基本使用 什么是requests 模块? Python 中封装好的一个基于网络请求的模块 requests 模块的作用? 用来模拟浏览器发请求 reques…

    数据库 2023年6月11日
    077
  • Postman安装及汉化

    1. 安装postman 各位根据各自需要可以参考下表自行下载,把链接内的”版本号”替换为指定的版本号 操作系统 下载链接 Windows64位 Windo…

    数据库 2023年6月14日
    096
  • MySQL实战45讲 10

    10 | MySQL为什么有时候会选错索引? 使用哪个索引是由 MySQL 来确定的 可能遇到的情况:一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变…

    数据库 2023年6月16日
    096
  • CMD命令 压缩包与图片完美融合,隐藏文件必备撒

    CMD命令 压缩包与图片完美融合,隐藏文件必备撒 在Windows端,将图片和压缩包完美融合,先将 源文件展示 压缩方案1 copy /b D:\project\IE11完整离线安…

    数据库 2023年6月9日
    0153
  • css height属性中的calc方法

    例如父盒子是100%的高度 盒子里面的head部分固定位140px 内容部分始终为剩余的全部高度 height: calc(100% – 140px); “…

    数据库 2023年6月16日
    0131
  • Redis——数据操作

    2022-09-20 Redis——select Redis数据库中的数据库的个数为: 16个,使用0号数据库开始的,到第15个数据库结束。 在ubantu中,进入Redis客户端…

    数据库 2023年6月14日
    069
  • 719. 找出第 K 小的数对距离

    数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组…

    数据库 2023年6月16日
    0107
  • 5、Idea同时选择多处光标进行编辑

    1、按住Alt+Shift,然后用鼠标左键点击文本,可以让光标在多个位置出现2、每个光标都会同时输入你正在输入的文本3、ESC退出 搜索 复制 Original: https://…

    数据库 2023年6月6日
    093
  • MySQL启动报:[ERROR] The server quit without updating PID file

    修改配置后 MySQL启动不了,报错: 看见这个不要惊慌,先把刚才修改的配置注释掉,看是不是配置有误!大部分是手误造成。 如果不行,再尝试一下方法: 解决方法 : 给予权限,执行 …

    数据库 2023年6月14日
    094
  • CISCN2022初赛misc wp

    ez_usb usb流量题,与以前的鼠标流量和键盘流量有所区别,但大同小异 导出所有的HID数据并按照ip分类,之后脚本解码得到压缩包和密码 mappings = { "…

    数据库 2023年6月11日
    0118
  • 绕过国内域名备案

    情景:现有域名jsw.top,云服务器1台均在阿里云下。域名jsw.top、www.jsw.top CNAME解析到阿里云OSS的记录值(阿里云OSS会要求备案,导致无法使用),而…

    数据库 2023年6月14日
    091
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    086
  • LIMIT和OFFSET分页性能差!今天来介绍如何高性能分页

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 前言 之前的大多数人分页采用的都…

    数据库 2023年6月11日
    0127
  • 如何识别 SQL Server 的版本

    本文介绍如何识别当前的Microsoft SQL Server 版本号和相应的产品或Service Pack 级别。同时介绍如何识别正在使用的SQL Server 具体版本。 如何…

    数据库 2023年6月11日
    083
  • MySQL 回表

    MySQL 回表 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。 一、简述 回表,顾名思义就是回到表中,也就是先通过普通索引扫描出数据所在的行,再通过行主键ID 取出索引中未包含…

    数据库 2023年6月14日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球