# component-data-mongodb **Repository Path**: missionodd/component-data-mongodb ## Basic Information - **Project Name**: component-data-mongodb - **Description**: An enhanced component for Mongodb to simplify development. - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-03 - **Last Updated**: 2023-02-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # component-data-mongodb An enhanced component for Mongodb to simplify development. ## Background Write a project for person learning. ## Example 1 ``` java // 方式1: CriteriaSimpleBuilder DepartmentDTO departmentDTO = new DepartmentDTO(); departmentDTO.setCreateTime(example.getCreateTime()); departmentDTO.setCharacter(example.getCharacter()); // 以And连接,dto属性注解@BindQuery + CriteriaSimpleBuilder.byModel(queryModel),构造 Criteria Criteria criteria1 = CriteriaBuilder.createAndLinkBuilder() .byModel(departmentDTO) .build(); // 以Or连接,dto属性注解@BindQuery + CriteriaSimpleBuilder.byModel(queryModel), 构造 Criteria Criteria criteria2 = CriteriaBuilder.createOrLinkBuilder() .byModel(departmentDTO) .build(); // 以And连接,CriteriaSimpleBuilder.eq(column, params)...链式构造,构造 Criteria Criteria criteria3 = CriteriaBuilder.createAndLinkBuilder() .gte("createTime", example.getCreateTime()) .eq("parentId",example.getCreateTime()) .build(); // CriteriaSimpleBuilder复杂组合,构造 Criteria Criteria criteria4 = CriteriaBuilder.createAndLinkBuilder() .byModel(departmentDTO) .gte("createTime", example.getCreateTime()) .eq("department.parentId", example.getCreateTime()) .append(Criteria.where("orgId").is(1)) .append( CriteriaBuilder .createOrLinkBuilder() .like("name", "test") .build() ) .build(); // 方式2:CriteriaLambdaBuilder // 以And连接,注解@BindQuery + CriteriaLambdaBuilder + SerializableFunction组合 构造 Criteria, 用法与上方相似 Criteria criteria5 = CriteriaBuilder.createAndLinkLambdaBuilder() .byModel(departmentDTO) .gte(DepartmentDTO::getCreateTime, example.getCreateTime()) .like(DepartmentDTO::getCharacter, example.getCharacter()) .build(); // elemMatch 数组模糊查询 Criteria criteria6 = CriteriaBuilder.createOrLinkLambdaBuilder() .arrayElemLike(SimpleSplitVO::getManagers, TestUser::getUsername, "test" ) .build(); // QueryBuilder 构造 Query, 并链式调用printQueryLog 打印Find和Count语句 Query query1 = QueryBuilder.query(criteria1) .skip(0) .limit(10) .printQueryLog(mongoConverter, Department.class) //打印 db.collection.find() .printCountLog(mongoConverter, Department.class) //打印 db.collection.count() .build(); List list1 = mongoTemplate.find(query1, Department.class); Assert.assertTrue(list1.size() >= 1); long count = mongoTemplate.count(query1, Department.class); Assert.assertTrue(count >= 1); // 从 QueryBuilder 获取 日志, 打印 QueryBuilder queryBuilder = QueryBuilder.query(criteria1); System.out.println(queryBuilder.getQueryLog(mongoConverter, Department.class)); Query query2 = queryBuilder.build(); List list2 = mongoTemplate.find(query2,Department.class); Assert.assertTrue(list2.size() >= 1); // sort 构造器 Sort sort = SortBuilder.create() .add("createTime", Sort.Direction.DESC) .add(Department::getId, Sort.Direction.ASC) .add(Sort.Order.asc("parentId")) .build(); query1.with(sort); //打印 含有排序语句 QueryBuilder.of(query1).printQueryLog(mongoConverter, Department.class); List list3 = mongoTemplate.find(query1, Department.class); Assert.assertTrue(list3.size() >= 1); ```