Mongodb使用总结[亲测有效]

Mongodb使用总结[亲测有效]Mongodb使用总结 基于内存操作,便于与网站交互 数据库-集合-文档(存储多种数据类型),我们的操作都是基于单文档进行操作,并且通过冗余字段进行操作 嵌入式数组文档减少了对昂贵连接的需求 Douc

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<InstanceData> instanceDatas = processInstanceData.getInstanceData();
instanceDatas.get(0);

//获取数组中的指定几个元素
//封装对象列表查询条件
        List<AggregationOperation> 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<JSONObject> aggregate = mongoTemplate
                .aggregate(aggregation, ProcessInstanceData.class, JSONObject.class);
//删除数组元素
instanceData = 删除的对象
update.pull(ProcessInstanceData.Fields.instanceData,instanceData);

原文地址:https://www.cnblogs.com/lcjtt/archive/2022/08/21/16610162.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4872.html

(0)
上一篇 2023-06-01
下一篇 2023-06-01

相关推荐

  • Redis API 介绍和使用(上)「终于解决」

    Redis API 介绍和使用(上)「终于解决」介绍5种数据结构之前,先了解一下Redis 的一些全局命令、数据结构和内部编码、单线程命令处理机制。 预备知识 1.全局命令 1.1 查看所有键 keys * 命令将所有的键输出。该命令会遍历所有键…

    2023-02-22
    119
  • [20191218]降序索引疑问4.txt

    [20191218]降序索引疑问4.txt[20191218]降序索引疑问4.txt–//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.–//我感觉有点奇怪,为什么开发要

    2022-12-27
    151
  • SqlServer2008 修改sa密码提示15535错误「建议收藏」

    SqlServer2008 修改sa密码提示15535错误「建议收藏」勾选“映射到凭据”

    2023-04-01
    149
  • Python Future概述

    Python Future概述Python语言自问世以来,一直得到了广泛的应用和支持,其在多种领域和行业中都有着重要的地位。而这个支持和应用的趋势还在不断加强,我们能够看到许多的技术、工具、框架、语法等等,都在不断的壮大和完善。在这篇文章中,我们将探讨Python的未来发展趋势,了解在众多的技术中,Python将如何持续的发展和壮大。

    2024-05-22
    58
  • mysql数据库基本类型_四类八种数据类型

    mysql数据库基本类型_四类八种数据类型一 数据库初识 1.1 什么是数据库 数据库(DataBase,简称DB),简而言之可视为电子化的文件柜 存储电子文件的处所,用户可以对文件中的数据运行新增,截取,更新,删除等操作. 所谓数据库是以一

    2022-12-24
    164
  • 什么是mysql慢查询_mysql数据库查询慢

    什么是mysql慢查询_mysql数据库查询慢一、

    2023-03-18
    149
  • 利用Python的concat函数进行字符串拼接

    利用Python的concat函数进行字符串拼接字符串拼接是编程中常见的操作,在从不同数据库中查询数据时经常遇到需要将多个字符串拼接在一起的情况。Python提供了一些内置的函数用于完成字符串拼接操作,其中包括concat函数。在本文中,我们将介绍Python的concat函数,并给出代码示例,以便读者可以更好地掌握其使用方法。

    2024-08-24
    29
  • 解决Python中name ‘os’ is not defined错误

    解决Python中name ‘os’ is not defined错误在Python中,我们可以使用import语句来导入其他的Python模块,通过导入模块来调用其中定义的方法和变量,这也是Python强大的面向对象编程的基础之一。然而,当我们在程序中出现name ‘os’ is not defined错误时,就表示Python找不到名为os的模块或者变量。这种错误通常在导入模块时出现,而且它还说明了一个很重要的问题,就是Python的模块机制。

    2024-03-25
    78

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注