Spring-Data-Mongodb的使用——Criteria API操作mongodb内嵌文档

Spring-Data-Mongodb的使用

  • Criteria API操作mongodb内嵌文档
    • 数据结构
    • mongodb的记录
    • 需求
    • 内嵌文档内的字段查询
    • java代码中使用Criteria API

Criteria API操作mongodb内嵌文档

物联网行业中,有多种不同的设备,比如卡车有“载重量“的指标,挖掘机有“铲斗容量”的指标,每种类型的设备参数值各不相同,需要给每种设备添加自定义指标,因此难以使用mysql等传统关系型数据库简历数据结构,针对即有通用字段又有专属字段的情况,文档数据库比较适合此类应用场景,文档数据库中包含有“内嵌文档”,以json串的形式保存自定义参数,较好的支持了物联网多种设备的情况。
以“设备类型管理”为例,建立javabean,新增mongodb数据,使用java Criteria API多条件查询内嵌文档内的字段。

数据结构

    /**
     * private String id;
     * private String name;
     * private HashMap params;//额外参数
     * private Date createTime;
     * private String createBy;
     */
@Document(collection = "device_type")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class DeviceType {
    /**
     * id
     */
    @Id
    @NotEmpty( message = "id不能为空",groups = UpdateGroup.class)
    private String id;

    /**
     * 设备类型名称
     */
    @Indexed
    private String name;

    /**
     * 参数
     */
    private HashMap<String, Object> params;

    /**
     * 逻辑删除
     */
    @JsonIgnore
    private Boolean deleted;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "create_time")
    private Date createTime;

    /**
     * 创建人id
     */
    @JsonIgnore
    @Column(name = "create_by")
    private String createBy;
}

mongodb的记录

mongodb新增的数据如下:

{
  "_id" : ObjectId("601a533c590bea1cec201f76"),
  "name" : "重卡",
  "params" : {
    "load" : "载重"
  },
  "deleted" : false,
  "createTime" : ISODate("2021-02-03T07:39:39.596Z"),
  "_class" : "com.xxx.www.server.data.entity.DeviceType"
}

其中params为自定义字段的集合,以内嵌文档的形式保存
自定义参数
{ “load” : “载重” }

需求

具体需求为:查询包含“载重”指标的设备类型有哪些

内嵌文档内的字段查询

mongodb中执行下面的语句查询内嵌文档:
首先新建指标的字典表
例如:
load:载重
capacity:铲斗容量
页面选择载重,前端传入load

db.device_type.find({"params.load":"载重"});

java代码中使用Criteria API

Criteria criteria = Criteria.where("deleted").is(false);
criteria.and("params." + key).exists(true);
mongoPageHelper.startPage(currentPage, pageSize, query, DeviceType.class);//分页
List<DeviceType> typeList = mongoTemplate.find(query, DeviceType.class);

你可能感兴趣的:(JavaEE,mongodb,java,javaee)