1. ObjectId 介绍
ObjectId 具有一个12字节的BSON类型的结构:
4字节:UNIX时间戳
3字节:表示运行MongoDB的机器
2字节:表示生成此_id的进程
3字节:由一个随机数开始的计数器生成的值
MongoDB使用ObjectID作为_id字段的缺省值,为创建各文档生成在各文档。
ObjectId的复杂组合,使所有的_id字段都是唯一的
2. ObjectId 转化
在之前的示例中,我们使用默认 Object 类去从 mongoDB 表中取出数据时,发现返回的 id 字段被自动解析了
public List getData(int pageNum, int pageSize, String tableName, HashMap<String, String> conditions) {
//创建查询对象
Query query = new Query();
//设置起始数
query.skip((pageNum - 1) * pageSize);
//设置查询条数
query.limit(pageSize);
if (conditions != null) {
for (String field: conditions.keySet()) {
query.addCriteria(new Criteria(field).is(conditions.get(field)));
}
}
return template.find(query, Object.class, tableName);
}
于是我们需要将这个 ObjectId 对象转化为 String 对象
具体实现方法:
1. 引入相关依赖
<!-- 添加Gson依赖 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
2. 代码实现
public List getData(QueryData queryData) {
// QueryData 为条件类,放置了相关查询条件
String tableName = queryData.getTableName();
int pageNum = queryData.getPageNum();
int pageSize = queryData.getPageSize();
HashMap<String, String> conditions = queryData.getConditions();
// 从库中取出原始数据
List list1 = commonDataImpl.getData(pageNum, pageSize, tableName, conditions);
//重点:转化过程
Gson gson = new Gson();
List resultList = new ArrayList();
//json解析
for (Object object:list1){
String json = gson.toJson(object);
JSONObject jsonObj = JSON.parseObject(json);
if (jsonObj.get("_id") != null) {
JSONObject id = (JSONObject) jsonObj.get("_id");
String jsonString = JSONObject.toJSONString(id);
ObjectId objectId = new Gson().fromJson(jsonString, ObjectId.class);
jsonObj.put("_id", objectId.toString());
}
resultList.add(jsonObj);
}
return resultList;
}
现在返回值已经是我们想看到的样子了