# MongoDB的使用

# 1. 安装

# 2. 使用

-- 创建索引,1是升序,-1降序
db.messageLog.createIndex({"businessNo": 1}, {name: "idx_businessNo"});
-- TTL过期索引及后台创建
db.messageLog.createIndex({createdTime: -1}, {background: true, expireAfterSeconds: 3600});

假如目前过期的数据不需要实时删除,而是统一晚上凌晨业务低峰期再删除,可以在数据插入的时候加一个过期时间的字段,这个字段值就固定设置为过期时间,然后针对这个字段设置过期事件,expireAfterSeconds 过期时间设置为 0 就可以做到定时删除

# 3. SpringBoot

# 3.1. 配置

  • 配置
# MongoDB
spring.data.mongodb.uri = mongodb://username:password@10.xx.xx.106:27017,10.xx.xx.117:27017/database?authSource=admin&readPreference=primary&ssl=false

spring:
  data:
    mongodb:
      uri: mongodb://username:password@10.xx.xx.106:27017,10.xx.xx.117:27017/database?authSource=admin&readPreference=primary&ssl=false
  • Maven
<!-- MongoDB -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

# 3.2. 代码

/**
 * MongoDB - 消息记录数据表实体类
 *
 * @author wliduo[i@dolyw.com]
 * @date 2023/1/4 11:28
 */
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Data
@Builder
@Document(collection = MessageLog.COLLECTION)
public class MessageLog {

    /**
     * COLLECTION
     */
    public static final String COLLECTION = "messageLog";

    /** 主键id */
    @Id
    private String id;

    /** 业务号 */
    @Indexed(name = "idx_businessNo", direction = IndexDirection.DESCENDING)
    private String businessNo;

    /** 业务类型 */
    @Indexed(name = "idx_businessType")
    private String businessType;

    // ...

    /** 创建时间 */
    @Indexed(name = "ttl_createdTime", expireAfterSeconds = 31536000)
    private Date createdTime;

    /** 更新时间 */
    @Indexed(name = "idx_updatedTime")
    private Date updatedTime;
}
/**
 * MongoDB - MQ消息记录数据表Repository操作类
 * 这里的用法和SpringDataJPA相似,可根据需要来自定义方法,不需要写实现
 * MongoRepository<对象, 主键列类型>
 *
 * @author wliduo[i@dolyw.com]
 * @date 2023/1/4 11:33
 */
@Repository
public interface MessageLogRepository extends MongoRepository<MessageLog, String> {

    /**
     * 根据业务类型及业务号查询
     *
     * @param businessType
     * @param businessNo
     * @return java.util.List<com.pcic.app.mongodb.entity.MessageLog>
     * @throws 
     * @author wliduo[i@dolyw.com]
     * @date 2023/3/9 16:29
     */
    List<MessageLog> findByBusinessTypeAndBusinessNo(String businessType, String businessNo);
    
}
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private MessageLogRepository messageLogRepository;

// 保存
mongoTemplate.save(messageLog);

// 查询
Query query = new Query(Criteria.where("correlationId").is(correlationId)
        .and("messageType").is(MessageTypeEnum.CONSUMER.getCode()));
long count = mongoTemplate.count(query, MessageLog.class);

// 查询
MessageLog messageLog = new MessageLog();
List<MessageLog> messageList = messageLogRepository.findAll(Example.of(messageLog));
上次更新时间: 2023-12-15 03:14:55