• 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);
    
  • 相关阅读:
    大小端的理解以及宏定义实现的理解
    花了三个月,终于把个人网站写完了
    Java学习随便记2
    【Python】-- 集合的常用方法
    云安全-云服务器(RAM)后渗透
    [附源码]Python计算机毕业设计SSM酒店住房管理系统(程序+LW)
    实验室储样瓶耐强酸强碱PFA材质试剂瓶适用新材料半导体
    电子科技大学链时代工作室招新题C语言部分---题号E
    MySQL建立主-从服务器双机热备配置
    无胁科技-TVD每日漏洞情报-2022-7-29
  • 原文地址:https://www.cnblogs.com/lcjtt/p/16610162.html