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

 

posted on 2022-05-05 14:46  MaXianZhe  阅读(80)  评论(0编辑  收藏  举报

导航