非常的简易透过 Spring boot 提供的注解我们可以轻松地宣告和使用
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "connectivity")
public class Connectivity {
private String name;
private Integer number;
private String status;
private Integer signalStrength;
@Field("IPlist")
private List<Map<String, Object>> ipList;
private Integer contentRevision;
private String deviceId;
private Long contentTimestamp;
}
Document
则是宣告 collection。
Field
annotation 可以帮助与 mongoDB 中定义的 field 进行映射。
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "gnss")
public class Gnss {
@Id
private String id;
private Integer contentRevision;
private String sensorName;
private Map<String, Object> coords; // Json format
private Double coordsAccuracy;
private String service;
private Double speed;
private Double heading;
private Long timestamp;
private String deviceId;
private Long contentTimestamp;
}
那接下来我们要怎样对 MongoDB 进行一些操作呢 ? 在 Spring boot 中也提供 API 给我们使用如下,透过继层 MongoRepository
我们就可以有基本的 CRUD 操作。
@Repository
public interface GnssRepository extends MongoRepository<Gnss, String> {
@Query("{'deviceId' : ?0 }")
List<GnssMappingVO> getByDeviceId(@Param("id") String id);
}
以下透过 MongoRepository 进行操作
@Override
public List<Gnss> getAllGnss() {
// basic query
return gnssRepository.findAll();
}
@Override
public Gnss getById(String id) {
// basic query
log.debug("Find Gnss by id:{}", id);
return gnssRepository.findById(id).orElse(null);
}
当然也可以使用 mongoTemplate 进行存取操作。
@Override
public List<GnssMappingVO> getListDeviceIdCustom(String id) {
// Use Query method
Query query = new Query();
query.fields().include("id").include("sensorName").include("coords").include("deviceId"); // like SQL SELECT
query.addCriteria(Criteria.where("deviceId").is(id)); // WHERE condition
query.with(Sort.by(Sort.Direction.ASC, "sensorName", "deviceId")); // like SQL ORDER BY
List<Gnss> gnssList = mongoTemplate.find(query, Gnss.class);
List<GnssMappingVO> res = new ArrayList<>();
/**
* 回传资料而外处理
*/
for (int i=0; i<gnssList.size(); i++){
GnssMappingVO gnssMappingVO = new GnssMappingVO().builder()
.id(gnssList.get(i).getId())
.sensorName(gnssList.get(i).getSensorName())
.coords(gnssList.get(i).getCoords())
.deviceId(gnssList.get(i).getDeviceId())
.build();
res.add(gnssMappingVO);
}
return res;
}
下面同样是用另一种方式进行存取使用 Aggregates
。
@Override
public List<Gnss> getListByTimestampRangeBson(GnssListRequestVO queryVO) {
String deviceId_column = "deviceId";
String timestamp_column = "timestamp";
String gps_column = "coords";
/**
* User Bson query
*/
Bson bson = Filters.and(Arrays.asList(
Filters.eq(deviceId_column, queryVO.getQuery().getDeviceId()),
Filters.gte(timestamp_column, queryVO.getQuery().getStart().getTime()),
Filters.lte(timestamp_column, queryVO.getQuery().getEnd().getTime()))); // Like Where condition
Bson match = Aggregates.match(bson);
Bson sort = Aggregates.sort(Sorts.ascending(timestamp_column)); // sort
Bson fields = Aggregates.project(Projections.include(deviceId_column, timestamp_column, gps_column)); // Like SELECT
AggregateIterable<Document> findIterable = mongoTemplate.getCollection(collection).aggregate(Arrays.asList(match, fields, sort));
Gson gson = new Gson(); // 转 JSON
JsonWriterSettings settings = JsonWriterSettings.builder()
.dateTimeConverter(new JsonDateTimeCoverter())
.int64Converter((value, writer) -> writer.writeNumber(value.toString()))
.build();
List<Gnss> res = StreamSupport.stream(findIterable.spliterator(), false)
.map(i -> gson.fromJson(i.toJson(settings), Gnss.class))
.collect(Collectors.toList());
return res;
}
MongoDB 在 Spring boot 中提供了很多好用的 API,当然这些东西都是还要读文件才有的,自干才是王道
<<: 铁人赛 Day28 -- AOS.js -- 滚动到元素的位置时,才开始动画
>>: Unity自主学习(十四):认识Unity介面(5)
函数 Dart是一种物件导向的语言,所以函数也是物件且为Function类型。因此Function可...
我们可以利用上次相同的题目来做此双因子变异数分析。 某间面包店的面包师傅想研究不同配方做出的面包所销...
在Wentz Wu网站上说明,CIA是美国法定目标(PUBLIC LAW 107–347—DEC. ...
工程师太师了: 第1话 杂记: 本来打好主意每天来PO一张图,等我PO完30天,就可以完赛了。 今天...
射击外星人 教学原文参考:射击外星人 这篇文章会介绍,如何在 Scratch 3 里使用建立分身、移...