MongoTemplate読み書き操作とインデックスの作成

22049 ワード

1、簡単なクエリーデータ
		Query query = new Query();
        Criteria criteria = Criteria.where("userId").is(userId);
        query.addCriteria(criteria).limit(1);
        List<DTO> dtoList = mongoTemplate.find(query,
            DTO.class, "xxx");
        // xxx collectionName

DTOのデータ型はmongodyの型と一致しなければならないことに特に注意してください.一致しない場合、例えばStringとLongはデータ2、ページングクエリーが調べられないことになります.
		Query query = new Query();
        Criteria criteria1 = null;
        Criteria criteria2 = null;
        Criteria criteria3 = null;
        try {
            if (!Strings.isNullOrEmpty(keyword)) {
                criteria1 = Criteria.where("keyword").regex(keyword);
            }
            if (!Strings.isNullOrEmpty(text)) {
                criteria2 = Criteria.where("text").regex(text);
            }
            if (!Strings.isNullOrEmpty(createTimeStart)) {
                criteria3 = Criteria.where("createTime").gte(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(createTimeStart));
            }
            if (!Strings.isNullOrEmpty(createTimeEnd)) {
                if (criteria3 != null) {
                    criteria3.lte(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(createTimeEnd));
                } else {
                    criteria3 = Criteria.where("createTime").lte(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(createTimeEnd));
                }
            }
            if (criteria1 != null || criteria2 != null || criteria3 != null) {
                Criteria criteria = new Criteria();
                List<Criteria> nonNull = Lists.newArrayList();
                if (criteria1 != null) {
                    nonNull.add(criteria1);
                }
                if (criteria2 != null) {
                    nonNull.add(criteria2);
                }
                if (criteria3 != null) {
                    nonNull.add(criteria3);
                }
                if (nonNull.size() > 1) {
                    criteria.andOperator(nonNull.toArray(new Criteria[]{}));
                }
                if (nonNull.size() == 1) {
                    criteria = nonNull.get(0);
                }
                query.addCriteria(criteria);
            }
            query = query.with(new Sort(Sort.Direction.DESC, "createTime")).skip(pageInfoDto.getStartRow()).limit(pageInfoDto.getPageSize());
            List<DTO> dtoList = mongoTemplate.find(query, DTO.class, "xxx");

以上でページングクエリを実現
3、データ新規
 				DTO dto= new DTO();
                dto.setId(1111);
                ....
                mongoTemplate.save(dto, "xxx");

4、索引の作成
ListIndexesIterable<Document> indexList = mongoTemplate
                .getCollection("xxx").listIndexes();
        //         ,      ,                
        for (Document document : indexList) {
            Object key = document.get("key");
            if (null != key && key instanceof Document) {
                Document keyDocument = (Document) key;
                if (keyDocument.containsKey("userId")) {
                    LoggerUtil.info("xxx userId exist index already");
                    return false;
                }
            }

        }
		
		//           
        IndexOptions indexOptions = new IndexOptions();
        indexOptions.background(true);
        indexOptions.name("idx_userId");

        String resultStr = mongoTemplate.getCollection("xxx")
        		// Document key       ,value     , userId   hashed    
                .createIndex(new Document("userId", "hashed"), new IndexOptions().background(false).name("idx_userId"));

        LoggerUtil.info("xxx add index idx_userId result : {}", resultStr);
        return true;

以上でインデックスの作成が完了します.