SpringBoot整合MongoDB(二)

136 阅读2分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

1、前言

在上一篇的分享中,我为大家介绍了mongo的安装,本次为大家分享下,SpringBoot项目整合mongo,及具体操作。

2、配置mongo

配置文件里增加用户名密码等参数:

data:
    mongodb:
      host: 127.0.0.1
      port: 27017
      username: root
      password: root
      database: test
      authentication-database: admin
      connections-per-host: 50
      min-connections-per-host: 50

pom文件里增加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

3、整合MongoDB

3.1、创建数据表实体类

这里,我们不需要去创建集合,只要将实体类写好,项目启动后就会映射到mongo中。

/**
 * @Title: MongoUserBehavior 
 * @date: 2021/10/22 14:33 
 */
@Document(collection = "user_behavior")  //标注集合的名称
@CompoundIndexes({
        @CompoundIndex(name = "user_behavior_idx", def = "{common_info_id : 1, behavior_object_id : 1}")
}) //索引注解,def中有多个值表明为联合索引,1表示正序 -1表示倒序
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MongoUserBehavior {
​
    /**
     * 用户主键ID
     */
    private String zshy_hyh_common_info_id;
​
    /**
     * 物品ID->(文章的ID)
     */
    private String behavior_object_id;
​
    /**
     * 是否喜欢、收藏
     */
    private Boolean has_like;
​
    /**
     * 是否评论
     */
    private Boolean has_comment;
​
    /**
     * 是否分享
     */
    private Boolean has_share;
​
    /**
     * 观看次数
     */
    private Integer read_num;
​
​
    /**
     * 最新阅读/观看时间 - 时间戳
     */
    private Long last_read_time;
​
    /**
     * 观看最大时长-秒值
     */
    private Long read_max_interval_time;
​
    /**
     * 观看最大百分比
     */
    private Double read_max_percent;
​
    /**
     * 观看总时长-秒值
     */
    private Long total_read_interval_time;
​
    /**
     * 视频长度 - 秒数
     */
    private Long video_length;
​
    /**
     * 用户行为详细信息
     */
    private List<MongoUserBehaviorItem> userBehaviorItems;
​
}
​
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MongoUserBehaviorItem {
​
    /**
     * 本次用户行为的唯一uid
     */
    private String user_behavior_uid;
​
    /**
     * 用户行为开始时间 - 时间戳
     */
    private Long start_time;
​
    /**
     * 用户行为结束时间 - 时间戳
     */
    private Long end_time;
​
    /**
     * 行为时间间隔-秒值
     */
    private Long interval_time;
​
    /**
     * 行为类型 
     */
    private Integer user_behavior_type;
​
    /**
     * 观看百分比
     */
    private Double read_percent;
​
}
​

查询操作:

Criteria criteria = Criteria.where("common_info_id").is(userBehavior.getCommon_info_id())
                    .and("behavior_object_id").is(userBehavior.getBehavior_object_id());
Query queryUserBehavior = new Query(criteria);
List<MongoUserBehavior> mongoUserBehaviors = mongoTemplate.find(queryUserBehavior, MongoUserBehavior.class);

增加数据:

mongoTemplate.save(mongoHyhUserBehavior);

更新操作:

//这里使用#.$.#是因为我是更新的文档里的数组的数据
Update update = Update.update("userBehaviorItems.$.end_time", userBehavior.getBehavior_end_time())
                .set("userBehaviorItems.$.interval_time", betweenSeconds);
mongoTemplate.updateFirst(queryUserBehaviorItem, update, MongoUserBehavior.class);
//updateFirst更新第一条匹配到的数据

好了、本期就先介绍到这里,下期为大家介绍如何进行复杂查询等,有什么需要交流的,大家可以随时私信我。😊