Mongodb创建api
package com.chinaunicom.base.server.document.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.bson.types.ObjectId; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.MongoId; import java.io.Serializable; import java.util.Date; @NoArgsConstructor @AllArgsConstructor @Accessors(chain = true) @Builder @Data @org.springframework.data.mongodb.core.mapping.Document("knowledge_base_document") public class Document implements Serializable { @MongoId private ObjectId objectId; @Indexed private String documentId;//业务id @Indexed private String kbaseId;//所属的知识库id private String data; private String author; @Indexed private String userId; @Indexed private String title;//文章标题 private Date createTime; private Date updateTime; private String tags; /** * 点赞数量 */ private Integer likeCount; /** * 阅读数量 */ private Integer readCount; /** * 版本号,修改的时候用户回滚使用 */ private int versionNo; }
@Repository public class DocumentRepoImpl implements IDocumentRepo { private static final Logger LOGGER = LoggerFactory.getLogger(DocumentRepoImpl.class); @Autowired private MongoTemplate mongoTemplate; @Autowired private MongoPageHelper mongoPageHelper; @Override public String addDocument(Document addDocumentRequest) { String documentId = BussinessKeyGenerator.getBussinessKey(); addDocumentRequest.setDocumentId(documentId); mongoTemplate.insert(addDocumentRequest); return documentId; } @Override public void modifyDocument(Document document) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.DOCUMENT_ID).is(document.getDocumentId())); Update update = new Update(); // 文档数据不为空修改文档数据 if (null != document.getData()) { update.set(DocumentConstants.DATA, document.getData()); } // 标题不为空修改标题 if (null != document.getTitle()) { update.set(DocumentConstants.ES_FIELD_TITLE, document.getTitle()); } // 修改前的版本号 update.set(DocumentConstants.VERSION_NO, document.getVersionNo()); mongoTemplate.findAndModify(query, update, Document.class); } @Override public List<Document> queryDocumentByDocumentIds(List<String> documentIds) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.DOCUMENT_ID).in(documentIds)); return mongoTemplate.find(query, Document.class); } @Override public void deleteDocumentByDocumentId(String documentId) { Query query = Query.query(Criteria.where(DocumentConstants.DOCUMENT_ID).is(documentId)); // findAndRemove只会删除第一条 mongoTemplate.findAndRemove(query, Document.class); } @Override public Document queryDocumentByDocumentId(String documentId) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.DOCUMENT_ID).is(documentId)); return mongoTemplate.findOne(query, Document.class); } @Override public PageableResult<Document> queryDocumentByUserId(String userId, Integer currentPage, Integer pageSize) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.USER_ID).is(userId)); Field findFields = query.fields(); // 指定查询字段 List<String> fields = new ArrayList<>(); fields.add(DocumentConstants.DOCUMENT_ID); fields.add(DocumentConstants.TITLE); fields.add(DocumentConstants.CREATE_TIME); fields.add(DocumentConstants.UPDATE_TIME); fields.add(DocumentConstants.KBASE_ID); fields.forEach(findFields::include); // 根据更新时间降序排序 query.with(Sort.by(Sort.Order.desc(DocumentConstants.UPDATE_TIME))); return mongoPageHelper.pageQuery(query, Document.class, pageSize, currentPage); } @Override public PageableResult<Document> queryDocumentByLibId(String libId, Integer currentPage, Integer pageSize) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.KBASE_ID).is(libId)); Field findFields = query.fields(); // 指定查询字段 List<String> fields = new ArrayList<>(); fields.add(DocumentConstants.DOCUMENT_ID); fields.add(DocumentConstants.TITLE); fields.add(DocumentConstants.CREATE_TIME); fields.add(DocumentConstants.UPDATE_TIME); fields.add(DocumentConstants.KBASE_ID); fields.add(DocumentConstants.AUTHOR); fields.forEach(findFields::include); // 根据更新时间降序排序 query.with(Sort.by(Sort.Order.desc(DocumentConstants.UPDATE_TIME))); return mongoPageHelper.pageQuery(query, Document.class, pageSize, currentPage); } @Override public List<Document> queryLibXDocuments(String libId, int queryCount, List<String> orderList) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.KBASE_ID).is(libId)); Field findFields = query.fields(); // 指定查询字段 List<String> fields = new ArrayList<>(); fields.add(DocumentConstants.DOCUMENT_ID); fields.add(DocumentConstants.TITLE); fields.add(DocumentConstants.CREATE_TIME); fields.add(DocumentConstants.UPDATE_TIME); fields.add(DocumentConstants.KBASE_ID); fields.add(DocumentConstants.AUTHOR); fields.add(DocumentConstants.LIKE_COUNT); fields.add(DocumentConstants.READ_COUNT); fields.forEach(findFields::include); // 添加排序方式 if (!CollectionUtils.isEmpty(orderList)) { for (String orderCol : orderList) { query.with(Sort.by(Sort.Order.desc(orderCol))); } } // 如果查询数量不为-1则查询指定数量 if (-1 != queryCount) { query.limit(queryCount); } return mongoTemplate.find(query, Document.class); } @Override public void updateDocLikeAndReadCount(int likeCount, int readCount, String docId) { Query query = new Query(); query.addCriteria(Criteria.where(DocumentConstants.DOCUMENT_ID).is(docId)); Update update = new Update(); update.set(DocumentConstants.LIKE_COUNT, likeCount); update.set(DocumentConstants.READ_COUNT, readCount); mongoTemplate.findAndModify(query, update, Document.class); } }
创建索引命令 指定索引名 INDEX_DOCUMENT
db.getCollection("document").createIndex({"data":1,"fullPath":-1},{"name":"INDEX_DOCUMENT"});