在Spring data MongoDB中实现批量删除记录
业务需求:比如前台需要用复选框勾选多条记录进行删除,本人以MongoDB中自动生成的_id为例进行批量删除操作。
- 建立数据库
- 建立Collection,比如叫“exampleSentence”
首先,对前台传来的参数进行处理,批量删除前台传入的参数形式应该是数组类型的json数据。比如:
{
"content": [
"5912e7ae2d725d1d7c72b04a",
"5912e7aa2d725d1d7c72b049"
]
}
接着,需要在后台Action中进行解析这些数据,本例子使用了阿里巴巴的json解析工具:compile('com.alibaba:fastjson:1.2.8');可以自行进行jar包依赖,处理函数如下:
@RequestMapping(value = "/sentence", method = RequestMethod.DELETE)
public String batchDeleteExampleSentence(@RequestBody String jsonInfo) {
String backMsg = null;
String message = null;
JSONObject jsObj = JSON.parseObject(jsonInfo);
JSONArray jsonArray = jsObj.getJSONArray("content");
int size = jsonArray.size();
String idInfo = null;
String[] id_array = new String[size];
for (int i = 0; i != size; ++i) {
idInfo = jsonArray.getObject(i, String.class);
id_array[i] = idInfo;
}
}
这样便可以取到前台传来的数组内容了,并且赋值给新建的String类型数组。此时到关键的如何进行批量删除这些数据记录了,还是之前说的,本例子通过记录_id进行删除。
@Override
public String batchDeleteExampleSentence(String[] sentenceId) throws Exception {
String message = "success";
List<ExampleSentenceDO> resultList = new ArrayList<ExampleSentenceDO>();
int length = sentenceId.length;
WriteResult writeResult;
int deleteNum = 0;
Query query;
//删除之前在log中记录当前数据总数
int count = 0;
count = mongoTemplate.findAll(ExampleSentenceDO.class).size();
System.out.println("Batch delete sentences-->Before delete ,the collection of exampleSentence total number:"+count);
//Criteria.where("id").in(sentenceIdTemp)中的参数sentenceIdTemp必须是Object,否则出现警告
Object[] sentenceIdTemp = sentenceId;
query = Query.query(Criteria.where("id").in(sentenceIdTemp));
writeResult = mongoTemplate.remove(query, ExampleSentenceDO.class);
deleteNum = writeResult.getN();
System.out.println("Batch delete sentences-->The collection of exampleSentence total numbers that have deleted:"+deleteNum);
if (deleteNum < length) {
message = "notExist";
}
return message;
}
}
这样就完成了批量操作了!