# MongoDB的使用
# 1. 安装
# 2. 使用
- MongoDB教程 - 菜鸟 (opens new window)
- MongoDB教程 - C语言 (opens new window)
- MongoDB索引 (opens new window)
- MongoDB根据时间范围查询数据 (opens new window)
- Mongodb设置TTL索引自动清理过期数据 (opens new window)
- MongoDB后台加索引及修改TTL时间 (opens new window)
- MongoDB索引的background及集群的索引建立 (opens new window)
-- 创建索引,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));