首页 > 数据库 >Mongodb使用总结

Mongodb使用总结

时间:2022-08-21 16:11:24浏览次数:64  
标签:总结 ProcessDefinition Mongodb 使用 update 文档 Fields query Criteria

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

标签:总结,ProcessDefinition,Mongodb,使用,update,文档,Fields,query,Criteria
From: https://www.cnblogs.com/lcjtt/p/16610162.html

相关文章

  • SqlServer 查看索引使用情况
    索引可以提供数据的快速访问,它能快速的定位到具体的数据行,返回sql查询语句的结果。通过一下sqlserver动态管理视图,可以查看索引的使用情况:select DB_NAME(ddius.data......
  • HTTPS解加密过程总结
    HTTPS用于解决HTTP不安全的问题。解决办法是加了一层SSL的建立过程,建立过程大概如下。1.客户端向服务器发起访问。2.服务器收到后,向CA机构发送公钥,CA机构向服务器颁发CA......
  • ServletContextListener使用
    ServletContextListener使用步骤:1,定义一个类,实现servletcontextListener接口2。复写方法3。配置1.web.xml<klistener><listener......
  • python 使用正则表达式截取字符串
    假设字符串“a={};”要截取包含花括号在内的内容importrepattern=r="=(.+?);"match_bet_list=eval(re.findall(pattern,match_bet_list,re.M)[0])re.M表示在字符......
  • .NET(C#) 使用Costura.Fody将程序发布成单个exe文件
    Costura是Fody的插件,将依赖项嵌入为资源实现程序发布成单个exe文件。本文主要介绍.NET(C#)中使用Costura.Fody将程序发布成单个exe文件的方法。原文地址:.NET(C#)使用Cos......
  • PS新手教程 --如何使用ps打造逼真冰冻水果效果
    如何使用ps打造逼真冰冻水果效果?水果加在冰块里的效果应该怎么做出来呢?用ps来做其实不难,让我来教教你!Photoshop2022 打开图片,我这里打开两张图片,做一下示范。1.先把......
  • c#使用Bitmap绘图的时候,内存增大问题
    最近碰到一个问题,就是使用Biamap绘图的时候,为了防止闪烁,使用了双缓存绘制的方式,但是会碰到内存急剧增加的情况,而且在XP的工控机和Win10的机器上运行结果不一样,在Win10上运......
  • 【博学谷学习记录】超强总结,用心分享。 Spring核心容器
    SpringFramework系统架构一.核心容器1.概念:代码书写现状:耦合度偏高解决方法:使用对象时,在程序中不要主动使用n......
  • 关于layui弹出层关闭和弹出层表格使用代理方式提交的小结
    varindexAdd=null;$('#btnAddCate').on('click',function(){indexAdd=layer.open({type:1,area:['500px','250px'],......
  • 新人使用Gorm的踩坑总结
    在使用Update更新数据时一定要将where条件放在update前面,否则where不会生效,将更新所有数据正确的写法//条件更新db.Model(&User{}).Where("id=?",ID).Update("name",......